about summary refs log tree commit diff
path: root/pkgs/development/python-modules
diff options
context:
space:
mode:
authorWinter <winter@winter.cafe>2022-08-06 12:32:04 -0400
committerWinter <winter@winter.cafe>2022-08-13 14:09:43 -0400
commit19adc3341cf3adfdbd408646aedbf8e62ce3eece (patch)
treeeee99752039b7cba720978e962c0f3ee1685ebf4 /pkgs/development/python-modules
parente8fbb38a51380fe6e56351b5750dddcccff79c4c (diff)
treewide: migrate to pythonPackages.unittestCheckHook
Diffstat (limited to 'pkgs/development/python-modules')
-rw-r--r--pkgs/development/python-modules/aioitertools/default.nix10
-rw-r--r--pkgs/development/python-modules/arxiv2bib/default.nix10
-rw-r--r--pkgs/development/python-modules/awesome-slugify/default.nix6
-rw-r--r--pkgs/development/python-modules/backports_abc/default.nix6
-rw-r--r--pkgs/development/python-modules/backports_tempfile/default.nix10
-rw-r--r--pkgs/development/python-modules/backports_weakref/default.nix8
-rw-r--r--pkgs/development/python-modules/bitstring/default.nix9
-rw-r--r--pkgs/development/python-modules/clevercsv/default.nix18
-rw-r--r--pkgs/development/python-modules/contextlib2/default.nix7
-rw-r--r--pkgs/development/python-modules/cvxopt/default.nix10
-rw-r--r--pkgs/development/python-modules/cyclonedx-python-lib/default.nix12
-rw-r--r--pkgs/development/python-modules/cymem/default.nix9
-rw-r--r--pkgs/development/python-modules/deprecation/default.nix7
-rw-r--r--pkgs/development/python-modules/emailthreads/default.nix8
-rw-r--r--pkgs/development/python-modules/enum34/default.nix6
-rw-r--r--pkgs/development/python-modules/fastimport/default.nix6
-rw-r--r--pkgs/development/python-modules/fido2/default.nix13
-rw-r--r--pkgs/development/python-modules/flask-babel/default.nix6
-rw-r--r--pkgs/development/python-modules/flask-bcrypt/default.nix8
-rw-r--r--pkgs/development/python-modules/flask-migrate/default.nix9
-rw-r--r--pkgs/development/python-modules/flask-seasurf/default.nix9
-rw-r--r--pkgs/development/python-modules/gb-io/default.nix5
-rw-r--r--pkgs/development/python-modules/greenlet/default.nix14
-rw-r--r--pkgs/development/python-modules/gruut-ipa/default.nix7
-rw-r--r--pkgs/development/python-modules/importlib-resources/default.nix8
-rw-r--r--pkgs/development/python-modules/isodate/default.nix8
-rw-r--r--pkgs/development/python-modules/jxmlease/default.nix10
-rw-r--r--pkgs/development/python-modules/karton-asciimagic/default.nix8
-rw-r--r--pkgs/development/python-modules/karton-core/default.nix8
-rw-r--r--pkgs/development/python-modules/karton-yaramatcher/default.nix8
-rw-r--r--pkgs/development/python-modules/kbcstorage/default.nix9
-rw-r--r--pkgs/development/python-modules/markdown/default.nix8
-rw-r--r--pkgs/development/python-modules/mat2/default.nix11
-rw-r--r--pkgs/development/python-modules/maxcube-api/default.nix10
-rw-r--r--pkgs/development/python-modules/mdutils/default.nix8
-rw-r--r--pkgs/development/python-modules/mkdocs/default.nix14
-rw-r--r--pkgs/development/python-modules/mock/default.nix6
-rw-r--r--pkgs/development/python-modules/mwdblib/default.nix8
-rw-r--r--pkgs/development/python-modules/mypy/extensions.nix8
-rw-r--r--pkgs/development/python-modules/nix-prefetch-github/default.nix6
-rw-r--r--pkgs/development/python-modules/pathlib/default.nix6
-rw-r--r--pkgs/development/python-modules/pgsanity/default.nix10
-rw-r--r--pkgs/development/python-modules/plac/default.nix9
-rw-r--r--pkgs/development/python-modules/pulsectl/default.nix7
-rw-r--r--pkgs/development/python-modules/pycparser/default.nix8
-rw-r--r--pkgs/development/python-modules/pypdf2/default.nix8
-rw-r--r--pkgs/development/python-modules/pyrad/default.nix10
-rw-r--r--pkgs/development/python-modules/pysensors/default.nix9
-rw-r--r--pkgs/development/python-modules/pyserial/default.nix10
-rw-r--r--pkgs/development/python-modules/pystache/default.nix8
-rw-r--r--pkgs/development/python-modules/python-keycloak/default.nix6
-rw-r--r--pkgs/development/python-modules/python-snappy/default.nix8
-rw-r--r--pkgs/development/python-modules/pytidylib/default.nix6
-rw-r--r--pkgs/development/python-modules/pytz/default.nix8
-rw-r--r--pkgs/development/python-modules/readlike/default.nix8
-rw-r--r--pkgs/development/python-modules/sjcl/default.nix8
-rw-r--r--pkgs/development/python-modules/sphinx-testing/default.nix8
-rw-r--r--pkgs/development/python-modules/sphinxcontrib-blockdiag/default.nix9
-rw-r--r--pkgs/development/python-modules/tabview/default.nix6
-rw-r--r--pkgs/development/python-modules/tomli/default.nix12
-rw-r--r--pkgs/development/python-modules/tornado/4.nix17
-rw-r--r--pkgs/development/python-modules/tornado/5.nix14
-rw-r--r--pkgs/development/python-modules/trytond/default.nix20
-rw-r--r--pkgs/development/python-modules/txrequests/default.nix6
-rw-r--r--pkgs/development/python-modules/u-msgpack-python/default.nix6
-rw-r--r--pkgs/development/python-modules/unidiff/default.nix8
-rw-r--r--pkgs/development/python-modules/unify/default.nix4
-rw-r--r--pkgs/development/python-modules/untangle/default.nix8
-rw-r--r--pkgs/development/python-modules/untokenize/default.nix4
-rw-r--r--pkgs/development/python-modules/vapoursynth/default.nix10
-rw-r--r--pkgs/development/python-modules/webcolors/default.nix8
-rw-r--r--pkgs/development/python-modules/websockets/default.nix8
-rw-r--r--pkgs/development/python-modules/zake/default.nix9
-rw-r--r--pkgs/development/python-modules/zope_copy/default.nix7
74 files changed, 259 insertions, 385 deletions
diff --git a/pkgs/development/python-modules/aioitertools/default.nix b/pkgs/development/python-modules/aioitertools/default.nix
index 451fb9e7fa108..4db5cde15f61c 100644
--- a/pkgs/development/python-modules/aioitertools/default.nix
+++ b/pkgs/development/python-modules/aioitertools/default.nix
@@ -12,7 +12,7 @@
 , typing-extensions
 
 # tests
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -35,14 +35,14 @@ buildPythonPackage rec {
     typing-extensions
   ];
 
+  checkInputs = [
+    unittestCheckHook
+  ];
+
   pythonImportsCheck = [
     "aioitertools"
   ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
-
   meta = with lib; {
     description = "Implementation of itertools, builtins, and more for AsyncIO and mixed-type iterables";
     license = licenses.mit;
diff --git a/pkgs/development/python-modules/arxiv2bib/default.nix b/pkgs/development/python-modules/arxiv2bib/default.nix
index 4dec50bbc67e3..54a6280017ae0 100644
--- a/pkgs/development/python-modules/arxiv2bib/default.nix
+++ b/pkgs/development/python-modules/arxiv2bib/default.nix
@@ -1,5 +1,8 @@
-{ buildPythonPackage, python, lib, fetchFromGitHub
+{ buildPythonPackage
+, lib
+, fetchFromGitHub
 , mock
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -14,9 +17,8 @@ buildPythonPackage rec {
     sha256 = "1kp2iyx20lpc9dv4qg5fgwf83a1wx6f7hj1ldqyncg0kn9xcrhbg";
   };
 
-  checkInputs = [ mock ];
-
-  checkPhase = "${python.interpreter} -m unittest discover -s tests";
+  checkInputs = [ unittestCheckHook mock ];
+  unittestFlagsArray = [ "-s" "tests" ];
 
   meta = with lib; {
     description = "Get a BibTeX entry from an arXiv id number, using the arxiv.org API";
diff --git a/pkgs/development/python-modules/awesome-slugify/default.nix b/pkgs/development/python-modules/awesome-slugify/default.nix
index 47ca9859b5e72..884dcd4bc614d 100644
--- a/pkgs/development/python-modules/awesome-slugify/default.nix
+++ b/pkgs/development/python-modules/awesome-slugify/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, unidecode, regex, python }:
+{ lib, buildPythonPackage, fetchPypi, unidecode, regex, unittestCheckHook }:
 
 buildPythonPackage rec {
   pname = "awesome-slugify";
@@ -20,9 +20,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ unidecode regex ];
 
-  checkPhase = ''
-      ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   meta = with lib; {
     homepage = "https://github.com/dimka665/awesome-slugify";
diff --git a/pkgs/development/python-modules/backports_abc/default.nix b/pkgs/development/python-modules/backports_abc/default.nix
index d67117613d7fa..684626c0780f2 100644
--- a/pkgs/development/python-modules/backports_abc/default.nix
+++ b/pkgs/development/python-modules/backports_abc/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -13,9 +13,7 @@ buildPythonPackage rec {
     sha256 = "033be54514a03e255df75c5aee8f9e672f663f93abb723444caec8fe43437bde";
   };
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   meta = {
     homepage = "https://github.com/cython/backports_abc";
diff --git a/pkgs/development/python-modules/backports_tempfile/default.nix b/pkgs/development/python-modules/backports_tempfile/default.nix
index 0d1203d28be2e..ef4f64def3a7d 100644
--- a/pkgs/development/python-modules/backports_tempfile/default.nix
+++ b/pkgs/development/python-modules/backports_tempfile/default.nix
@@ -1,5 +1,5 @@
 { lib
-, python
+, unittestCheckHook
 , buildPythonPackage
 , fetchPypi
 , setuptools-scm
@@ -19,13 +19,13 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ backports_weakref ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s tests
-  '';
-
   # requires https://pypi.org/project/backports.test.support
   doCheck = false;
 
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "tests" ];
+
   meta = {
     description = "Backport of new features in Python's tempfile module";
     license = lib.licenses.psfl;
diff --git a/pkgs/development/python-modules/backports_weakref/default.nix b/pkgs/development/python-modules/backports_weakref/default.nix
index 4db504ac3306f..a0cbe6d4b8434 100644
--- a/pkgs/development/python-modules/backports_weakref/default.nix
+++ b/pkgs/development/python-modules/backports_weakref/default.nix
@@ -3,7 +3,7 @@
 , fetchPypi
 , setuptools-scm
 # , backports
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -20,9 +20,9 @@ buildPythonPackage rec {
   # Requires backports package
   doCheck = false;
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover tests
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "tests" ];
 
   meta = with lib; {
     description = "Backports of new features in Python’s weakref module";
diff --git a/pkgs/development/python-modules/bitstring/default.nix b/pkgs/development/python-modules/bitstring/default.nix
index 52bc9bae865bd..2b3fdef896b2e 100644
--- a/pkgs/development/python-modules/bitstring/default.nix
+++ b/pkgs/development/python-modules/bitstring/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -15,10 +15,9 @@ buildPythonPackage rec {
     sha256 = "0y2kcq58psvl038r6dhahhlhp1wjgr5zsms45wyz1naq6ri8x9qa";
   };
 
-  checkPhase = ''
-    cd test
-    ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "test" ];
 
   pythonImportsCheck = [ "bitstring" ];
 
diff --git a/pkgs/development/python-modules/clevercsv/default.nix b/pkgs/development/python-modules/clevercsv/default.nix
index 21993af3eb53a..5384fb01c5cb5 100644
--- a/pkgs/development/python-modules/clevercsv/default.nix
+++ b/pkgs/development/python-modules/clevercsv/default.nix
@@ -9,6 +9,7 @@
 , regex
 , tabview
 , python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -33,26 +34,29 @@ buildPythonPackage rec {
     tabview
   ];
 
+  checkInputs = [ unittestCheckHook ];
+
   pythonImportsCheck = [
     "clevercsv"
     "clevercsv.cparser"
   ];
 
-  checkPhase = ''
+  preCheck = ''
     # by linking the installed version the tests also have access to compiled native libraries
     rm -r clevercsv
     ln -s $out/${python.sitePackages}/clevercsv/ clevercsv
-    # their ci only runs unit tests, there are also integration and fuzzing tests
-    ${python.interpreter} -m unittest discover -v -f -s ./tests/test_unit
   '';
 
+  # their ci only runs unit tests, there are also integration and fuzzing tests
+  unittestFlagsArray = [ "-v" "-f" "-s" "./tests/test_unit" ];
+
   meta = with lib; {
     description = "CleverCSV is a Python package for handling messy CSV files";
     longDescription = ''
-       CleverCSV is a Python package for handling messy CSV files. It provides
-       a drop-in replacement for the builtin CSV module with improved dialect
-       detection, and comes with a handy command line application for working
-       with CSV files.
+      CleverCSV is a Python package for handling messy CSV files. It provides
+      a drop-in replacement for the builtin CSV module with improved dialect
+      detection, and comes with a handy command line application for working
+      with CSV files.
     '';
     homepage = "https://github.com/alan-turing-institute/CleverCSV";
     changelog = "https://github.com/alan-turing-institute/CleverCSV/blob/master/CHANGELOG.md";
diff --git a/pkgs/development/python-modules/contextlib2/default.nix b/pkgs/development/python-modules/contextlib2/default.nix
index 6aea2570cb87e..456999679fcdc 100644
--- a/pkgs/development/python-modules/contextlib2/default.nix
+++ b/pkgs/development/python-modules/contextlib2/default.nix
@@ -3,6 +3,7 @@
 , fetchPypi
 , python
 , pythonOlder
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -17,11 +18,7 @@ buildPythonPackage rec {
     hash = "sha256-qx4r/h0B2Wjht+jZAjvFHvNQm7ohe7cwzuOCfh7oKGk=";
   };
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   pythonImportsCheck = [
     "contextlib2"
diff --git a/pkgs/development/python-modules/cvxopt/default.nix b/pkgs/development/python-modules/cvxopt/default.nix
index dfae672f95e0a..31772c2693532 100644
--- a/pkgs/development/python-modules/cvxopt/default.nix
+++ b/pkgs/development/python-modules/cvxopt/default.nix
@@ -3,8 +3,10 @@
 , fetchPypi
 , isPyPy
 , python
-, blas, lapack # build segfaults with 64-bit blas
+, blas
+, lapack # build segfaults with 64-bit blas
 , suitesparse
+, unittestCheckHook
 , glpk ? null
 , gsl ? null
 , fftw ? null
@@ -49,9 +51,9 @@ buildPythonPackage rec {
     export CVXOPT_FFTW_INC_DIR=${fftw.dev}/include
   '';
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s tests
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "tests" ];
 
   meta = with lib; {
     homepage = "http://cvxopt.org/";
diff --git a/pkgs/development/python-modules/cyclonedx-python-lib/default.nix b/pkgs/development/python-modules/cyclonedx-python-lib/default.nix
index cd69d5b1b5ed9..731aef1c647f0 100644
--- a/pkgs/development/python-modules/cyclonedx-python-lib/default.nix
+++ b/pkgs/development/python-modules/cyclonedx-python-lib/default.nix
@@ -14,6 +14,7 @@
 , toml
 , types-setuptools
 , types-toml
+, unittestCheckHook
 , xmldiff
 }:
 
@@ -47,6 +48,7 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
+    unittestCheckHook
     jsonschema
     lxml
     xmldiff
@@ -56,13 +58,9 @@ buildPythonPackage rec {
     "cyclonedx"
   ];
 
- checkPhase = ''
-   runHook preCheck
-   # Tests require network access
-   rm tests/test_output_json.py
-   ${python.interpreter} -m unittest discover -s tests -v
-   runHook postCheck
- '';
+  preCheck = ''
+    rm tests/test_output_json.py
+  '';
 
   meta = with lib; {
     description = "Python library for generating CycloneDX SBOMs";
diff --git a/pkgs/development/python-modules/cymem/default.nix b/pkgs/development/python-modules/cymem/default.nix
index d2d010e9b12f1..3e5d497dbfad5 100644
--- a/pkgs/development/python-modules/cymem/default.nix
+++ b/pkgs/development/python-modules/cymem/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchFromGitHub
 , cython
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -25,10 +25,9 @@ buildPythonPackage rec {
       --replace "wheel>=0.32.0,<0.33.0" "wheel>=0.31.0"
   '';
 
-  checkPhase = ''
-    cd cymem/tests
-    ${python.interpreter} -m unittest discover -p "*test*"
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "cymem/tests" "-p" "*test*" ];
 
   meta = with lib; {
     description = "Cython memory pool for RAII-style memory management";
diff --git a/pkgs/development/python-modules/deprecation/default.nix b/pkgs/development/python-modules/deprecation/default.nix
index d77554c79ab80..441971fa6e709 100644
--- a/pkgs/development/python-modules/deprecation/default.nix
+++ b/pkgs/development/python-modules/deprecation/default.nix
@@ -5,6 +5,7 @@
 , pythonAtLeast
 , pythonOlder
 , unittest2
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -29,14 +30,10 @@ buildPythonPackage rec {
 
   # avoiding mass rebuilds for python3.9, but no longer
   # needed with patch
-  checkInputs = lib.optional (pythonOlder "3.10") [
+  checkInputs = [ unittestCheckHook ] ++ lib.optional (pythonOlder "3.10") [
     unittest2
   ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
-
   meta = with lib; {
     description = "A library to handle automated deprecations";
     homepage = "https://deprecation.readthedocs.io/";
diff --git a/pkgs/development/python-modules/emailthreads/default.nix b/pkgs/development/python-modules/emailthreads/default.nix
index c57e58368ff82..3daaf1577e689 100644
--- a/pkgs/development/python-modules/emailthreads/default.nix
+++ b/pkgs/development/python-modules/emailthreads/default.nix
@@ -1,5 +1,5 @@
 { lib, fetchFromGitHub, buildPythonPackage
-, python, isPy3k }:
+, python, isPy3k, unittestCheckHook }:
 
 buildPythonPackage rec {
   pname = "emailthreads";
@@ -14,11 +14,9 @@ buildPythonPackage rec {
     sha256 = "sha256-7BhYS1DQCW9QpG31asPCq5qPyJy+WW2onZpvEHhwQCs=";
   };
 
-  PKGVER = version;
+  checkInputs = [ unittestCheckHook ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover test
-  '';
+  PKGVER = version;
 
   meta = with lib; {
     homepage = "https://github.com/emersion/python-emailthreads";
diff --git a/pkgs/development/python-modules/enum34/default.nix b/pkgs/development/python-modules/enum34/default.nix
index 91f54dc99cbf6..746e4dd314e7f 100644
--- a/pkgs/development/python-modules/enum34/default.nix
+++ b/pkgs/development/python-modules/enum34/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchPypi
 , pythonAtLeast
-, python
+, unittestCheckHook
 }:
 
 if pythonAtLeast "3.4" then null else buildPythonPackage rec {
@@ -14,9 +14,7 @@ if pythonAtLeast "3.4" then null else buildPythonPackage rec {
     sha256 = "cce6a7477ed816bd2542d03d53db9f0db935dd013b70f336a95c73979289f248";
   };
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   meta = with lib; {
     homepage = "https://pypi.python.org/pypi/enum34";
diff --git a/pkgs/development/python-modules/fastimport/default.nix b/pkgs/development/python-modules/fastimport/default.nix
index bd5c270d686cb..d05037ca9ef1a 100644
--- a/pkgs/development/python-modules/fastimport/default.nix
+++ b/pkgs/development/python-modules/fastimport/default.nix
@@ -2,7 +2,7 @@
 , pythonOlder
 , buildPythonPackage
 , fetchPypi
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -16,9 +16,7 @@ buildPythonPackage rec {
     sha256 = "6ac99dda4e7b0b3ae831507b6d0094802e6dd95891feafde8cc5c405b6c149ca";
   };
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   pythonImportsCheck = [ "fastimport" ];
 
diff --git a/pkgs/development/python-modules/fido2/default.nix b/pkgs/development/python-modules/fido2/default.nix
index 129d18639234e..26ccd95054ca6 100644
--- a/pkgs/development/python-modules/fido2/default.nix
+++ b/pkgs/development/python-modules/fido2/default.nix
@@ -5,6 +5,7 @@
 , cryptography
 , mock
 , pyfakefs
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -18,17 +19,9 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ six cryptography ];
 
-  checkInputs = [ mock pyfakefs ];
+  checkInputs = [ unittestCheckHook mock pyfakefs ];
 
-  # Testing with `python setup.py test` doesn't work:
-  # https://github.com/Yubico/python-fido2/issues/108#issuecomment-763513576
-  checkPhase = ''
-    runHook preCheck
-
-    python -m unittest discover -v
-
-    runHook postCheck
-  '';
+  unittestFlagsArray = [ "-v" ];
 
   pythonImportsCheck = [ "fido2" ];
 
diff --git a/pkgs/development/python-modules/flask-babel/default.nix b/pkgs/development/python-modules/flask-babel/default.nix
index a538327650b25..9a2aef0570eca 100644
--- a/pkgs/development/python-modules/flask-babel/default.nix
+++ b/pkgs/development/python-modules/flask-babel/default.nix
@@ -1,6 +1,6 @@
 { lib
 , buildPythonPackage
-, python
+, unittestCheckHook
 , fetchPypi
 , flask
 , babel
@@ -26,9 +26,7 @@ buildPythonPackage rec {
     speaklater
   ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s tests
-  '';
+  unittestFlagsArray = [ "-s" "tests" ];
 
   meta = with lib; {
     description = "Adds i18n/l10n support to Flask applications";
diff --git a/pkgs/development/python-modules/flask-bcrypt/default.nix b/pkgs/development/python-modules/flask-bcrypt/default.nix
index 1c09b6d809c4a..fc80c50190468 100644
--- a/pkgs/development/python-modules/flask-bcrypt/default.nix
+++ b/pkgs/development/python-modules/flask-bcrypt/default.nix
@@ -3,7 +3,7 @@
 , fetchFromGitHub
 , flask
 , bcrypt
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -22,11 +22,7 @@ buildPythonPackage rec {
     bcrypt
   ];
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   pythonImportsCheck = [
     "flask_bcrypt"
diff --git a/pkgs/development/python-modules/flask-migrate/default.nix b/pkgs/development/python-modules/flask-migrate/default.nix
index 04532032038fc..63047c98fdf17 100644
--- a/pkgs/development/python-modules/flask-migrate/default.nix
+++ b/pkgs/development/python-modules/flask-migrate/default.nix
@@ -6,7 +6,7 @@
 , flask
 , flask_script
 , flask-sqlalchemy
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -33,15 +33,10 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
+    unittestCheckHook
     flask_script
   ];
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
-
   meta = with lib; {
     description = "SQLAlchemy database migrations for Flask applications using Alembic";
     homepage = "https://github.com/miguelgrinberg/Flask-Migrate";
diff --git a/pkgs/development/python-modules/flask-seasurf/default.nix b/pkgs/development/python-modules/flask-seasurf/default.nix
index 6d09d7ec45c69..cebc4bfa89aa0 100644
--- a/pkgs/development/python-modules/flask-seasurf/default.nix
+++ b/pkgs/development/python-modules/flask-seasurf/default.nix
@@ -1,4 +1,4 @@
-{ lib, fetchFromGitHub, buildPythonPackage, isPy3k, flask, mock, python }:
+{ lib, fetchFromGitHub, buildPythonPackage, isPy3k, flask, mock, unittestCheckHook }:
 
 buildPythonPackage rec {
   pname = "Flask-SeaSurf";
@@ -15,15 +15,10 @@ buildPythonPackage rec {
   propagatedBuildInputs = [ flask ];
 
   checkInputs = [
+    unittestCheckHook
     mock
   ];
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
-
   pythonImportsCheck = [ "flask_seasurf" ];
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/gb-io/default.nix b/pkgs/development/python-modules/gb-io/default.nix
index 4aab9d1bc6ff4..6a44b758d2934 100644
--- a/pkgs/development/python-modules/gb-io/default.nix
+++ b/pkgs/development/python-modules/gb-io/default.nix
@@ -4,6 +4,7 @@
 , buildPythonPackage
 , rustPlatform
 , setuptools-rust
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -31,9 +32,7 @@ buildPythonPackage rec {
     rust.rustc
   ]);
 
-  checkPhase = ''
-    python -m unittest discover
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   pythonImportsCheck = [ "gb_io" ];
 
diff --git a/pkgs/development/python-modules/greenlet/default.nix b/pkgs/development/python-modules/greenlet/default.nix
index 78ac1668b6f8d..4264a8252610e 100644
--- a/pkgs/development/python-modules/greenlet/default.nix
+++ b/pkgs/development/python-modules/greenlet/default.nix
@@ -2,31 +2,29 @@
 , buildPythonPackage
 , fetchPypi
 , isPyPy
-, python
+, unittestCheckHook
 }:
 
 
 buildPythonPackage rec {
   pname = "greenlet";
   version = "1.1.2";
-  disabled = isPyPy;  # builtin for pypy
+  disabled = isPyPy; # builtin for pypy
 
   src = fetchPypi {
     inherit pname version;
     sha256 = "e30f5ea4ae2346e62cedde8794a56858a67b878dd79f7df76a0767e356b1744a";
   };
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover -v greenlet.tests
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-v" "greenlet.tests" ];
 
   meta = with lib; {
     homepage = "https://github.com/python-greenlet/greenlet";
     description = "Module for lightweight in-process concurrent programming";
     license = with licenses; [
-      psfl  # src/greenlet/slp_platformselect.h & files in src/greenlet/platform/ directory
+      psfl # src/greenlet/slp_platformselect.h & files in src/greenlet/platform/ directory
       mit
     ];
   };
diff --git a/pkgs/development/python-modules/gruut-ipa/default.nix b/pkgs/development/python-modules/gruut-ipa/default.nix
index f0824670731d0..2b8ed6709ac51 100644
--- a/pkgs/development/python-modules/gruut-ipa/default.nix
+++ b/pkgs/development/python-modules/gruut-ipa/default.nix
@@ -4,6 +4,7 @@
 , espeak
 , numpy
 , python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -29,11 +30,7 @@ buildPythonPackage rec {
     numpy
   ];
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   pythonImportsCheck = [
     "gruut_ipa"
diff --git a/pkgs/development/python-modules/importlib-resources/default.nix b/pkgs/development/python-modules/importlib-resources/default.nix
index 2eb41c4c504d0..89537a8dfa2b4 100644
--- a/pkgs/development/python-modules/importlib-resources/default.nix
+++ b/pkgs/development/python-modules/importlib-resources/default.nix
@@ -6,7 +6,7 @@
 , importlib-metadata
 , typing ? null
 , pythonOlder
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -31,9 +31,9 @@ buildPythonPackage rec {
     typing
   ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [
+    unittestCheckHook
+  ];
 
   pythonImportsCheck = [
     "importlib_resources"
diff --git a/pkgs/development/python-modules/isodate/default.nix b/pkgs/development/python-modules/isodate/default.nix
index 21bcc3ed90a3d..ba507f168dbfd 100644
--- a/pkgs/development/python-modules/isodate/default.nix
+++ b/pkgs/development/python-modules/isodate/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, python
+, unittestCheckHook
 , six
 }:
 
@@ -16,9 +16,9 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ six ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s src/isodate/tests
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "src/isodate/tests" ];
 
   meta = with lib; {
     description = "ISO 8601 date/time parser";
diff --git a/pkgs/development/python-modules/jxmlease/default.nix b/pkgs/development/python-modules/jxmlease/default.nix
index 5036ede5e5e98..19b29bf763972 100644
--- a/pkgs/development/python-modules/jxmlease/default.nix
+++ b/pkgs/development/python-modules/jxmlease/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchPypi
 , lxml
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -22,11 +22,9 @@ buildPythonPackage rec {
   # https://github.com/Juniper/jxmlease/issues/26
   doCheck = false;
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover -v
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-v" ];
 
   meta = with lib; {
     description = "Converts between XML and intelligent Python data structures";
diff --git a/pkgs/development/python-modules/karton-asciimagic/default.nix b/pkgs/development/python-modules/karton-asciimagic/default.nix
index 3ebba4202b3bc..74cfa7f8b53c1 100644
--- a/pkgs/development/python-modules/karton-asciimagic/default.nix
+++ b/pkgs/development/python-modules/karton-asciimagic/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchFromGitHub
 , karton-core
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -20,11 +20,7 @@ buildPythonPackage rec {
     karton-core
   ];
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   pythonImportsCheck = [ "karton.asciimagic" ];
 
diff --git a/pkgs/development/python-modules/karton-core/default.nix b/pkgs/development/python-modules/karton-core/default.nix
index d4e95481327bb..9a25f3cf12375 100644
--- a/pkgs/development/python-modules/karton-core/default.nix
+++ b/pkgs/development/python-modules/karton-core/default.nix
@@ -2,7 +2,7 @@
 , boto3
 , buildPythonPackage
 , fetchFromGitHub
-, python
+, unittestCheckHook
 , redis
 }:
 
@@ -22,11 +22,7 @@ buildPythonPackage rec {
     redis
   ];
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   pythonImportsCheck = [
     "karton.core"
diff --git a/pkgs/development/python-modules/karton-yaramatcher/default.nix b/pkgs/development/python-modules/karton-yaramatcher/default.nix
index 16b4036c90cb3..67f99af39d9ad 100644
--- a/pkgs/development/python-modules/karton-yaramatcher/default.nix
+++ b/pkgs/development/python-modules/karton-yaramatcher/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchFromGitHub
 , karton-core
-, python
+, unittestCheckHook
 , yara-python
 }:
 
@@ -22,11 +22,7 @@ buildPythonPackage rec {
     yara-python
   ];
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   pythonImportsCheck = [ "karton.yaramatcher" ];
 
diff --git a/pkgs/development/python-modules/kbcstorage/default.nix b/pkgs/development/python-modules/kbcstorage/default.nix
index 913b7981edd09..d84ee1994b5b8 100644
--- a/pkgs/development/python-modules/kbcstorage/default.nix
+++ b/pkgs/development/python-modules/kbcstorage/default.nix
@@ -12,7 +12,7 @@
 
 # tests
 , responses
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -44,15 +44,10 @@ buildPythonPackage rec {
     doCheck = false;
 
     checkInputs = [
+      unittestCheckHook
       responses
     ];
 
-    checkPhase = ''
-      runHook preCheck
-      ${python.interpreter} -m unittest discover
-      runHook postCheck
-    '';
-
     pythonImportsCheck = [
       "kbcstorage"
       "kbcstorage.buckets"
diff --git a/pkgs/development/python-modules/markdown/default.nix b/pkgs/development/python-modules/markdown/default.nix
index 7207edb5815c3..999fe2682b8c2 100644
--- a/pkgs/development/python-modules/markdown/default.nix
+++ b/pkgs/development/python-modules/markdown/default.nix
@@ -4,7 +4,7 @@
 , fetchPypi
 , importlib-metadata
 , pyyaml
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -25,11 +25,7 @@ buildPythonPackage rec {
     importlib-metadata
   ];
 
-  checkInputs = [ pyyaml ];
-
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [ unittestCheckHook pyyaml ];
 
   pythonImportsCheck = [ "markdown" ];
 
diff --git a/pkgs/development/python-modules/mat2/default.nix b/pkgs/development/python-modules/mat2/default.nix
index cd11b56ac267b..59a1dddc22bf6 100644
--- a/pkgs/development/python-modules/mat2/default.nix
+++ b/pkgs/development/python-modules/mat2/default.nix
@@ -1,7 +1,7 @@
 { lib
 , stdenv
 , buildPythonPackage
-, python
+, unittestCheckHook
 , pythonOlder
 , fetchFromGitLab
 , substituteAll
@@ -17,7 +17,8 @@
 , mutagen
 , pygobject3
 , pycairo
-, dolphinIntegration ? false, plasma5Packages
+, dolphinIntegration ? false
+, plasma5Packages
 }:
 
 buildPythonPackage rec {
@@ -92,9 +93,9 @@ buildPythonPackage rec {
     install -Dm 444 dolphin/mat2.desktop -t "$out/share/kservices5/ServiceMenus"
   '';
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -v
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-v" ];
 
   meta = with lib; {
     description = "A handy tool to trash your metadata";
diff --git a/pkgs/development/python-modules/maxcube-api/default.nix b/pkgs/development/python-modules/maxcube-api/default.nix
index 36bcc35fc036d..0627667a4e568 100644
--- a/pkgs/development/python-modules/maxcube-api/default.nix
+++ b/pkgs/development/python-modules/maxcube-api/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , pythonOlder
 , fetchFromGitHub
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -22,17 +22,13 @@ buildPythonPackage rec {
     substituteInPlace setup.py --replace "license=license" "license='MIT'"
   '';
 
+  checkInputs = [ unittestCheckHook ];
+
   pythonImportsCheck = [
     "maxcube"
     "maxcube.cube"
   ];
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
-
   meta = with lib; {
     description = "eQ-3/ELV MAX! Cube Python API";
     homepage = "https://github.com/hackercowboy/python-maxcube-api";
diff --git a/pkgs/development/python-modules/mdutils/default.nix b/pkgs/development/python-modules/mdutils/default.nix
index 08ea5eb8b6fc1..f2b1425893127 100644
--- a/pkgs/development/python-modules/mdutils/default.nix
+++ b/pkgs/development/python-modules/mdutils/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -15,11 +15,7 @@ buildPythonPackage rec {
     sha256 = "sha256-regIrMWbGmW574dfojxZFJoivpaqOpN1I6YsqLEp8BM=";
   };
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   meta = with lib; {
     description = "Set of basic tools that can help to create Markdown files";
diff --git a/pkgs/development/python-modules/mkdocs/default.nix b/pkgs/development/python-modules/mkdocs/default.nix
index 2345ca93f94f0..0fb61bd8a5996 100644
--- a/pkgs/development/python-modules/mkdocs/default.nix
+++ b/pkgs/development/python-modules/mkdocs/default.nix
@@ -18,7 +18,7 @@
   # testing deps
 , babel
 , mock
-, pytestCheckHook
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -47,20 +47,12 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
+    unittestCheckHook
     babel
     mock
   ];
 
-
-  checkPhase = ''
-    set -euo pipefail
-
-    runHook preCheck
-
-    python -m unittest discover -v -p '*tests.py' mkdocs --top-level-directory .
-
-    runHook postCheck
-  '';
+  unittestFlagsArray = [ "-v" "-p" "'*tests.py'" "mkdocs" ];
 
   pythonImportsCheck = [ "mkdocs" ];
 
diff --git a/pkgs/development/python-modules/mock/default.nix b/pkgs/development/python-modules/mock/default.nix
index 464a6ae969d77..d23ae8d30c9fc 100644
--- a/pkgs/development/python-modules/mock/default.nix
+++ b/pkgs/development/python-modules/mock/default.nix
@@ -5,6 +5,7 @@
 , python
 , pythonOlder
 , pytest
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -26,11 +27,8 @@ buildPythonPackage rec {
     })
   ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
-
   checkInputs = [
+    unittestCheckHook
     pytest
   ];
 
diff --git a/pkgs/development/python-modules/mwdblib/default.nix b/pkgs/development/python-modules/mwdblib/default.nix
index db81e951cf288..69a191f16f973 100644
--- a/pkgs/development/python-modules/mwdblib/default.nix
+++ b/pkgs/development/python-modules/mwdblib/default.nix
@@ -6,7 +6,7 @@
 , fetchFromGitHub
 , humanize
 , keyring
-, python
+, unittestCheckHook
 , python-dateutil
 , pythonOlder
 , requests
@@ -36,11 +36,7 @@ buildPythonPackage rec {
     requests
   ];
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   pythonImportsCheck = [
     "mwdblib"
diff --git a/pkgs/development/python-modules/mypy/extensions.nix b/pkgs/development/python-modules/mypy/extensions.nix
index 04b22e2c54387..37257efe5edc9 100644
--- a/pkgs/development/python-modules/mypy/extensions.nix
+++ b/pkgs/development/python-modules/mypy/extensions.nix
@@ -2,7 +2,7 @@
 , fetchFromGitHub
 , buildPythonPackage
 , typing
-, python
+, unittestCheckHook
 , pythonOlder
 }:
 
@@ -19,9 +19,9 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = lib.optional (pythonOlder "3.5") typing;
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover tests
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "tests" ];
 
   pythonImportsCheck = [ "mypy_extensions" ];
 
diff --git a/pkgs/development/python-modules/nix-prefetch-github/default.nix b/pkgs/development/python-modules/nix-prefetch-github/default.nix
index 7ef63348dfb3a..d6cc74190852e 100644
--- a/pkgs/development/python-modules/nix-prefetch-github/default.nix
+++ b/pkgs/development/python-modules/nix-prefetch-github/default.nix
@@ -4,6 +4,7 @@
 , git
 , which
 , pythonOlder
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -19,11 +20,8 @@ buildPythonPackage rec {
     sha256 = "GHUH3Oog800qrdgXs5AEa4O6ovZ1LT0k3P4YwEHfwlY=";
   };
 
-  checkInputs = [ git which ];
+  checkInputs = [ unittestCheckHook git which ];
 
-  checkPhase = ''
-    python -m unittest discover
-  '';
   # ignore tests which are impure
   DISABLED_TESTS = "network requires_nix_build";
 
diff --git a/pkgs/development/python-modules/pathlib/default.nix b/pkgs/development/python-modules/pathlib/default.nix
index cf4dd0999d4a3..b29a5bae8ed23 100644
--- a/pkgs/development/python-modules/pathlib/default.nix
+++ b/pkgs/development/python-modules/pathlib/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, python
+, unittestCheckHook
 , pythonAtLeast
 }:
 
@@ -15,9 +15,7 @@ buildPythonPackage rec {
     sha256 = "17zajiw4mjbkkv6ahp3xf025qglkj0805m9s41c45zryzj6p2h39";
   };
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   meta = {
     description = "Object-oriented filesystem paths";
diff --git a/pkgs/development/python-modules/pgsanity/default.nix b/pkgs/development/python-modules/pgsanity/default.nix
index 26e5eb2bd6acc..82d636979e101 100644
--- a/pkgs/development/python-modules/pgsanity/default.nix
+++ b/pkgs/development/python-modules/pgsanity/default.nix
@@ -2,7 +2,9 @@
 , python
 , fetchPypi
 , buildPythonPackage
-, postgresql }:
+, postgresql
+, unittestCheckHook
+}:
 
 buildPythonPackage rec {
   pname = "pgsanity";
@@ -13,11 +15,7 @@ buildPythonPackage rec {
     sha256 = "de0bbd6fe4f98bf5139cb5f466eac2e2abaf5a7b050b9e4867b87bf360873173";
   };
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s test
-  '';
-
-  checkInputs = [ postgresql ];
+  checkInputs = [ unittestCheckHook postgresql ];
   propagatedBuildInputs = [ postgresql ];
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/plac/default.nix b/pkgs/development/python-modules/plac/default.nix
index 4c353ab7a4e73..f9d373e68dbe3 100644
--- a/pkgs/development/python-modules/plac/default.nix
+++ b/pkgs/development/python-modules/plac/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, python
+, unittestCheckHook
 , pythonOlder
 }:
 
@@ -17,10 +17,9 @@ buildPythonPackage rec {
     hash = "sha256-OL3YZNBFD7dIGTqoF7nEWKj1MZ+/l7ImEVHPwKWBIJA=";
   };
 
-  checkPhase = ''
-    cd doc
-    ${python.interpreter} -m unittest discover -p "*test_plac*"
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "doc" "-p" "*test_plac*" ];
 
   pythonImportsCheck = [
     "plac"
diff --git a/pkgs/development/python-modules/pulsectl/default.nix b/pkgs/development/python-modules/pulsectl/default.nix
index 1990915eef444..e895a0920e5cd 100644
--- a/pkgs/development/python-modules/pulsectl/default.nix
+++ b/pkgs/development/python-modules/pulsectl/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, libpulseaudio, glibc, substituteAll, stdenv, pulseaudio, python }:
+{ lib, buildPythonPackage, fetchPypi, libpulseaudio, glibc, substituteAll, stdenv, pulseaudio, unittestCheckHook }:
 
 buildPythonPackage rec {
   pname = "pulsectl";
@@ -22,11 +22,10 @@ buildPythonPackage rec {
     "pulsectl"
   ];
 
-  checkInputs = [ pulseaudio ];
+  checkInputs = [ unittestCheckHook pulseaudio ];
 
-  checkPhase = ''
+  preCheck = ''
     export HOME=$TMPDIR
-    ${python.interpreter} -m unittest discover
   '';
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/pycparser/default.nix b/pkgs/development/python-modules/pycparser/default.nix
index c8283f93c512e..47f1a20fbb29f 100644
--- a/pkgs/development/python-modules/pycparser/default.nix
+++ b/pkgs/development/python-modules/pycparser/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, python }:
+{ lib, buildPythonPackage, fetchPypi, unittestCheckHook }:
 
 buildPythonPackage rec {
   pname = "pycparser";
@@ -9,9 +9,9 @@ buildPythonPackage rec {
     sha256 = "e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206";
   };
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s tests
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "tests" ];
 
   meta = with lib; {
     description = "C parser in Python";
diff --git a/pkgs/development/python-modules/pypdf2/default.nix b/pkgs/development/python-modules/pypdf2/default.nix
index 2ae89bf43f074..ea32a40c60e15 100644
--- a/pkgs/development/python-modules/pypdf2/default.nix
+++ b/pkgs/development/python-modules/pypdf2/default.nix
@@ -4,7 +4,7 @@
 , pythonOlder
 , glibcLocales
 , typing-extensions
-, python
+, unittestCheckHook
 , isPy3k
 }:
 
@@ -24,13 +24,11 @@ buildPythonPackage rec {
     typing-extensions
   ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
-
   # Tests broken on Python 3.x
   #doCheck = !(isPy3k);
 
+  checkInputs = [ unittestCheckHook ];
+
   meta = with lib; {
     description = "A Pure-Python library built as a PDF toolkit";
     homepage = "http://mstamy2.github.com/PyPDF2/";
diff --git a/pkgs/development/python-modules/pyrad/default.nix b/pkgs/development/python-modules/pyrad/default.nix
index c8fb0310548d0..97c8b6895c3f4 100644
--- a/pkgs/development/python-modules/pyrad/default.nix
+++ b/pkgs/development/python-modules/pyrad/default.nix
@@ -5,7 +5,7 @@
 , poetry-core
 , netaddr
 , six
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -43,11 +43,9 @@ buildPythonPackage rec {
       --replace "def testBindv6(self):" "def dontTestBindv6(self):"
   '';
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
+  checkInputs = [
+    unittestCheckHook
+  ];
 
   pythonImportsCheck = [
     "pyrad"
diff --git a/pkgs/development/python-modules/pysensors/default.nix b/pkgs/development/python-modules/pysensors/default.nix
index 8cff62b89c1fe..e7d3697da0fbd 100644
--- a/pkgs/development/python-modules/pysensors/default.nix
+++ b/pkgs/development/python-modules/pysensors/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, python, fetchFromGitHub, lm_sensors }:
+{ lib, buildPythonPackage, unittestCheckHook, fetchFromGitHub, lm_sensors }:
 buildPythonPackage {
   version = "2017-07-13";
   pname = "pysensors";
@@ -17,10 +17,9 @@ buildPythonPackage {
   # due to sandboxing
   doCheck = false;
 
-  checkPhase = ''
-    cd tests
-    ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "tests" ];
 
   meta = with lib; {
     maintainers = with maintainers; [ guibou ];
diff --git a/pkgs/development/python-modules/pyserial/default.nix b/pkgs/development/python-modules/pyserial/default.nix
index e6b8edb784aae..7eed44d0fbb18 100644
--- a/pkgs/development/python-modules/pyserial/default.nix
+++ b/pkgs/development/python-modules/pyserial/default.nix
@@ -2,7 +2,7 @@
 , stdenv
 , buildPythonPackage
 , fetchPypi
-, python
+, unittestCheckHook
 , pythonOlder
 , isPy3k
 }:
@@ -27,11 +27,9 @@ buildPythonPackage rec {
 
   doCheck = !stdenv.hostPlatform.isDarwin; # broken on darwin
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover -s test
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "test" ];
 
   pythonImportsCheck = [
     "serial"
diff --git a/pkgs/development/python-modules/pystache/default.nix b/pkgs/development/python-modules/pystache/default.nix
index 67ee0063827f1..b3270c5e73344 100644
--- a/pkgs/development/python-modules/pystache/default.nix
+++ b/pkgs/development/python-modules/pystache/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, python, fetchPypi, isPy3k, glibcLocales }:
+{ lib, buildPythonPackage, unittestCheckHook, fetchPypi, isPy3k, glibcLocales }:
 
 buildPythonPackage rec {
   pname = "pystache";
@@ -13,14 +13,12 @@ buildPythonPackage rec {
 
   buildInputs = [ glibcLocales ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
-
   # SyntaxError Python 3
   # https://github.com/defunkt/pystache/issues/181
   doCheck = !isPy3k;
 
+  checkInputs = [ unittestCheckHook ];
+
   meta = with lib; {
     description = "A framework-agnostic, logic-free templating system inspired by ctemplate and et";
     homepage = "https://github.com/defunkt/pystache";
diff --git a/pkgs/development/python-modules/python-keycloak/default.nix b/pkgs/development/python-modules/python-keycloak/default.nix
index 6425869243ef1..0d2be6a4d145e 100644
--- a/pkgs/development/python-modules/python-keycloak/default.nix
+++ b/pkgs/development/python-modules/python-keycloak/default.nix
@@ -4,6 +4,7 @@
 , requests
 , python-jose
 , httmock
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -23,13 +24,10 @@ buildPythonPackage rec {
   ];
 
   checkInputs = [
+    unittestCheckHook
     httmock
   ];
 
-  checkPhase = ''
-    python -m unittest discover
-  '';
-
   pythonImportsCheck = [ "keycloak" ];
 
   meta = with lib; {
diff --git a/pkgs/development/python-modules/python-snappy/default.nix b/pkgs/development/python-modules/python-snappy/default.nix
index 397fcaa3dd0d1..d75c80d5e4159 100644
--- a/pkgs/development/python-modules/python-snappy/default.nix
+++ b/pkgs/development/python-modules/python-snappy/default.nix
@@ -4,7 +4,7 @@
 , isPyPy
 , snappy
 , cffi
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -21,11 +21,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = lib.optional isPyPy cffi;
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   meta = with lib; {
     description = "Python library for the snappy compression library from Google";
diff --git a/pkgs/development/python-modules/pytidylib/default.nix b/pkgs/development/python-modules/pytidylib/default.nix
index 16f6e4232b305..15280fff4b052 100644
--- a/pkgs/development/python-modules/pytidylib/default.nix
+++ b/pkgs/development/python-modules/pytidylib/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, buildPythonPackage, fetchPypi, python, html-tidy }:
+{ lib, stdenv, buildPythonPackage, fetchPypi, unittestCheckHook, html-tidy }:
 
 buildPythonPackage rec {
   pname = "pytidylib";
@@ -21,9 +21,7 @@ buildPythonPackage rec {
         $'    @unittest.skip("")\n    def test_large_document(self):'
   '';
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   meta = with lib; {
     description = "Python wrapper for HTML Tidy (tidylib) on Python 2 and 3";
diff --git a/pkgs/development/python-modules/pytz/default.nix b/pkgs/development/python-modules/pytz/default.nix
index 27b18845804f9..58ac098c17cce 100644
--- a/pkgs/development/python-modules/pytz/default.nix
+++ b/pkgs/development/python-modules/pytz/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, python }:
+{ lib, buildPythonPackage, fetchPypi, unittestCheckHook }:
 
 buildPythonPackage rec {
   pname = "pytz";
@@ -9,9 +9,9 @@ buildPythonPackage rec {
     sha256 = "sha256-HnYOL+aoFjvAs9mhnE+ENCr6Cir/6/qoSwG5eKAuyqc=";
   };
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s pytz/tests
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "pytz/tests" ];
 
   pythonImportsCheck = [ "pytz" ];
 
diff --git a/pkgs/development/python-modules/readlike/default.nix b/pkgs/development/python-modules/readlike/default.nix
index f2e3d11e7edd8..fae5b1a78720a 100644
--- a/pkgs/development/python-modules/readlike/default.nix
+++ b/pkgs/development/python-modules/readlike/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -15,9 +15,9 @@ buildPythonPackage rec {
     sha256 = "1mw8j8ads8hqdbz42siwpffi4wi5s33z9g14a5c2i7vxp8m68qc1";
   };
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s tests
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "tests" ];
 
   meta = with lib; {
     description = "GNU Readline-like line editing module";
diff --git a/pkgs/development/python-modules/sjcl/default.nix b/pkgs/development/python-modules/sjcl/default.nix
index 41da6669b54f7..0ef52c6571315 100644
--- a/pkgs/development/python-modules/sjcl/default.nix
+++ b/pkgs/development/python-modules/sjcl/default.nix
@@ -3,7 +3,7 @@
 , fetchFromGitHub
 , pythonOlder
 , pycryptodome
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -23,11 +23,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ pycryptodome ];
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   pythonImportsCheck = [
     "sjcl"
diff --git a/pkgs/development/python-modules/sphinx-testing/default.nix b/pkgs/development/python-modules/sphinx-testing/default.nix
index 1a8521bf43825..daf90bb3b5030 100644
--- a/pkgs/development/python-modules/sphinx-testing/default.nix
+++ b/pkgs/development/python-modules/sphinx-testing/default.nix
@@ -4,7 +4,7 @@
 , mock
 , sphinx
 , six
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -16,12 +16,10 @@ buildPythonPackage rec {
     sha256 = "ef661775b5722d7b00f67fc229104317d35637a4fb4434bf2c005afdf1da4d09";
   };
 
-  checkInputs = [ mock ];
+  checkInputs = [ unittestCheckHook mock ];
   propagatedBuildInputs = [ sphinx six ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s tests
-  '';
+  unittestFlagsArray = [ "-s" "tests" ];
 
   # Test failures https://github.com/sphinx-doc/sphinx-testing/issues/5
   doCheck = false;
diff --git a/pkgs/development/python-modules/sphinxcontrib-blockdiag/default.nix b/pkgs/development/python-modules/sphinxcontrib-blockdiag/default.nix
index 0b26c24319faf..61b44aa2b7042 100644
--- a/pkgs/development/python-modules/sphinxcontrib-blockdiag/default.nix
+++ b/pkgs/development/python-modules/sphinxcontrib-blockdiag/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, python
+, unittestCheckHook
 , mock
 , sphinx-testing
 , sphinx
@@ -22,9 +22,10 @@ buildPythonPackage rec {
 
   # Seems to look for files in the wrong dir
   doCheck = false;
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s tests
-  '';
+
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "tests" ];
 
   meta = with lib; {
     description = "Sphinx blockdiag extension";
diff --git a/pkgs/development/python-modules/tabview/default.nix b/pkgs/development/python-modules/tabview/default.nix
index 35a7f7d8a7dc0..6123dc8a05672 100644
--- a/pkgs/development/python-modules/tabview/default.nix
+++ b/pkgs/development/python-modules/tabview/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchFromGitHub
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -17,9 +17,7 @@ buildPythonPackage rec {
     sha256 = "1d1l8fhdn3w2zg7wakvlmjmgjh9lh9h5fal1clgyiqmhfix4cn4m";
   };
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   meta = with lib; {
     description = "Python curses command line CSV and tabular data viewer";
diff --git a/pkgs/development/python-modules/tomli/default.nix b/pkgs/development/python-modules/tomli/default.nix
index c9c9cb46b2c75..24a3b2f51f067 100644
--- a/pkgs/development/python-modules/tomli/default.nix
+++ b/pkgs/development/python-modules/tomli/default.nix
@@ -3,9 +3,9 @@
 , callPackage
 , fetchFromGitHub
 , flit-core
-, python
+, unittestCheckHook
 
-# important downstream dependencies
+  # important downstream dependencies
 , flit
 , black
 , mypy
@@ -26,13 +26,9 @@ buildPythonPackage rec {
 
   nativeBuildInputs = [ flit-core ];
 
-  pythonImportsCheck = [ "tomli" ];
+  checkInputs = [ unittestCheckHook ];
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
+  pythonImportsCheck = [ "tomli" ];
 
   passthru.tests = {
     # test downstream dependencies
diff --git a/pkgs/development/python-modules/tornado/4.nix b/pkgs/development/python-modules/tornado/4.nix
index 3be82e40a2985..5765dee4415af 100644
--- a/pkgs/development/python-modules/tornado/4.nix
+++ b/pkgs/development/python-modules/tornado/4.nix
@@ -1,26 +1,27 @@
 { lib
-, python
+, unittestCheckHook
 , buildPythonPackage
 , fetchPypi
 , isPy27
+, pythonAtLeast
 }:
 
 buildPythonPackage rec {
   pname = "tornado";
   version = "4.5.3";
-  disabled = isPy27 || python.pythonAtLeast "3.10";
-
-  # We specify the name of the test files to prevent
-  # https://github.com/NixOS/nixpkgs/issues/14634
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover *_test.py
-  '';
+  disabled = isPy27 || pythonAtLeast "3.10";
 
   src = fetchPypi {
     inherit pname version;
     sha256 = "02jzd23l4r6fswmwxaica9ldlyc2p6q8dk6dyff7j58fmdzf853d";
   };
 
+  checkInputs = [ unittestCheckHook ];
+
+  # We specify the name of the test files to prevent
+  # https://github.com/NixOS/nixpkgs/issues/14634
+  unittestFlagsArray = [ "*_test.py" ];
+
   __darwinAllowLocalNetworking = true;
 
   meta = {
diff --git a/pkgs/development/python-modules/tornado/5.nix b/pkgs/development/python-modules/tornado/5.nix
index f0dc14b5fa2ab..5dfb4f8054296 100644
--- a/pkgs/development/python-modules/tornado/5.nix
+++ b/pkgs/development/python-modules/tornado/5.nix
@@ -1,5 +1,5 @@
 { lib
-, python
+, unittestCheckHook
 , buildPythonPackage
 , fetchPypi
 , isPy27
@@ -11,17 +11,17 @@ buildPythonPackage rec {
   version = "5.1.1";
   disabled = isPy27 || pythonAtLeast "3.10";
 
-  # We specify the name of the test files to prevent
-  # https://github.com/NixOS/nixpkgs/issues/14634
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover *_test.py
-  '';
-
   src = fetchPypi {
     inherit pname version;
     sha256 = "4e5158d97583502a7e2739951553cbd88a72076f152b4b11b64b9a10c4c49409";
   };
 
+  checkInputs = [ unittestCheckHook ];
+
+  # We specify the name of the test files to prevent
+  # https://github.com/NixOS/nixpkgs/issues/14634
+  unittestFlagsArray = [ "*_test.py" ];
+
   __darwinAllowLocalNetworking = true;
 
   meta = {
diff --git a/pkgs/development/python-modules/trytond/default.nix b/pkgs/development/python-modules/trytond/default.nix
index df877a2e70261..4d0fc2908e65e 100644
--- a/pkgs/development/python-modules/trytond/default.nix
+++ b/pkgs/development/python-modules/trytond/default.nix
@@ -18,8 +18,9 @@
 , weasyprint
 , gevent
 , pillow
-, withPostgresql ? true, psycopg2
-, python
+, withPostgresql ? true
+, psycopg2
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -54,21 +55,20 @@ buildPythonPackage rec {
     gevent
     pillow
   ] ++ relatorio.optional-dependencies.fodt
-    ++ passlib.optional-dependencies.bcrypt
-    ++ passlib.optional-dependencies.argon2
-    ++ lib.optional withPostgresql psycopg2;
+  ++ passlib.optional-dependencies.bcrypt
+  ++ passlib.optional-dependencies.argon2
+  ++ lib.optional withPostgresql psycopg2;
 
-  checkPhase = ''
-    runHook preCheck
+  checkInputs = [ unittestCheckHook ];
 
+  preCheck = ''
     export HOME=$(mktemp -d)
     export TRYTOND_DATABASE_URI="sqlite://"
     export DB_NAME=":memory:";
-    ${python.interpreter} -m unittest discover -s trytond.tests
-
-    runHook postCheck
   '';
 
+  unittestFlagsArray = [ "-s" "trytond.tests" ];
+
   meta = with lib; {
     description = "The server of the Tryton application platform";
     longDescription = ''
diff --git a/pkgs/development/python-modules/txrequests/default.nix b/pkgs/development/python-modules/txrequests/default.nix
index cf3bee52c5904..eaf94e21ee3ae 100644
--- a/pkgs/development/python-modules/txrequests/default.nix
+++ b/pkgs/development/python-modules/txrequests/default.nix
@@ -4,7 +4,7 @@
 , twisted
 , requests
 , cryptography
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -21,9 +21,7 @@ buildPythonPackage rec {
   # Require network access
   doCheck = false;
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   meta = with lib; {
     description = "Asynchronous Python HTTP for Humans.";
diff --git a/pkgs/development/python-modules/u-msgpack-python/default.nix b/pkgs/development/python-modules/u-msgpack-python/default.nix
index f44b7db455b1f..1a82fe4b70a89 100644
--- a/pkgs/development/python-modules/u-msgpack-python/default.nix
+++ b/pkgs/development/python-modules/u-msgpack-python/default.nix
@@ -2,7 +2,7 @@
 , lib
 , fetchPypi
 , glibcLocales
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -18,9 +18,7 @@ buildPythonPackage rec {
 
   buildInputs = [ glibcLocales ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   meta = {
     description = "A portable, lightweight MessagePack serializer and deserializer written in pure Python";
diff --git a/pkgs/development/python-modules/unidiff/default.nix b/pkgs/development/python-modules/unidiff/default.nix
index 8fe8a760cf09a..2fea8dca66f24 100644
--- a/pkgs/development/python-modules/unidiff/default.nix
+++ b/pkgs/development/python-modules/unidiff/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchPypi, python }:
+{ lib, buildPythonPackage, fetchPypi, unittestCheckHook }:
 
 buildPythonPackage rec {
   pname = "unidiff";
@@ -9,9 +9,9 @@ buildPythonPackage rec {
     sha256 = "2bbcbc986e1fb97f04b1d7b864aa6002ab02f4d8a996bf03aa6e5a81447d1fc5";
   };
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s tests/
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "tests" ];
 
   pythonImportsCheck = [ "unidiff" ];
 
diff --git a/pkgs/development/python-modules/unify/default.nix b/pkgs/development/python-modules/unify/default.nix
index a1061ad9df91b..45b7557117052 100644
--- a/pkgs/development/python-modules/unify/default.nix
+++ b/pkgs/development/python-modules/unify/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchFromGitHub
 , untokenize
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -19,7 +19,7 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ untokenize ];
 
-  checkPhase = "${python.interpreter} -m unittest discover";
+  checkInputs = [ unittestCheckHook ];
 
   meta = with lib; {
     description = "Modifies strings to all use the same quote where possible";
diff --git a/pkgs/development/python-modules/untangle/default.nix b/pkgs/development/python-modules/untangle/default.nix
index 6582f5080bd05..22472549e6ccc 100644
--- a/pkgs/development/python-modules/untangle/default.nix
+++ b/pkgs/development/python-modules/untangle/default.nix
@@ -1,4 +1,4 @@
-{ lib, buildPythonPackage, fetchFromGitHub, python, defusedxml }:
+{ lib, buildPythonPackage, fetchFromGitHub, unittestCheckHook, defusedxml }:
 
 buildPythonPackage rec {
   pname = "untangle";
@@ -16,9 +16,9 @@ buildPythonPackage rec {
     defusedxml
   ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s tests
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "tests" ];
 
   meta = with lib; {
     description = "Convert XML documents into Python objects";
diff --git a/pkgs/development/python-modules/untokenize/default.nix b/pkgs/development/python-modules/untokenize/default.nix
index 55becfeac4e87..2977ffd76e5db 100644
--- a/pkgs/development/python-modules/untokenize/default.nix
+++ b/pkgs/development/python-modules/untokenize/default.nix
@@ -1,7 +1,7 @@
 { lib
 , buildPythonPackage
 , fetchPypi
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -13,7 +13,7 @@ buildPythonPackage rec {
     sha256 = "3865dbbbb8efb4bb5eaa72f1be7f3e0be00ea8b7f125c69cbd1f5fda926f37a2";
   };
 
-  checkPhase = "${python.interpreter} -m unittest discover";
+  checkInputs = [ unittestCheckHook ];
 
   meta = with lib; {
     description = "Transforms tokens into original source code while preserving whitespace";
diff --git a/pkgs/development/python-modules/vapoursynth/default.nix b/pkgs/development/python-modules/vapoursynth/default.nix
index bfd5e1ca8b2bc..ec88f244aee62 100644
--- a/pkgs/development/python-modules/vapoursynth/default.nix
+++ b/pkgs/development/python-modules/vapoursynth/default.nix
@@ -1,4 +1,4 @@
-{ vapoursynth, cython, buildPythonPackage, python }:
+{ vapoursynth, cython, buildPythonPackage, unittestCheckHook }:
 
 buildPythonPackage {
   pname = "vapoursynth";
@@ -13,9 +13,11 @@ buildPythonPackage {
     vapoursynth
   ];
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s $src/test -p "*test.py"
-  '';
+  checkInputs = [
+    unittestCheckHook
+  ];
+
+  unittestFlagsArray = [ "-s" "$src/test" "-p" "'*test.py'" ];
 
   inherit (vapoursynth) meta;
 }
diff --git a/pkgs/development/python-modules/webcolors/default.nix b/pkgs/development/python-modules/webcolors/default.nix
index ccd4163492f18..46498b5950a1a 100644
--- a/pkgs/development/python-modules/webcolors/default.nix
+++ b/pkgs/development/python-modules/webcolors/default.nix
@@ -2,7 +2,7 @@
 , buildPythonPackage
 , fetchPypi
 , pythonOlder
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -17,9 +17,9 @@ buildPythonPackage rec {
     hash = "sha256-FtBD06CP1qGxt+Pp5iZA0JeQ3OgNK91HkqF1s1/nlKk=";
   };
 
-  checkPhase = ''
-    ${python.interpreter} -m unittest discover -s tests
-  '';
+  checkInputs = [ unittestCheckHook ];
+
+  unittestFlagsArray = [ "-s" "tests" ];
 
   pythonImportsCheck = [
     "webcolors"
diff --git a/pkgs/development/python-modules/websockets/default.nix b/pkgs/development/python-modules/websockets/default.nix
index 538055b989091..ba8ee074664f9 100644
--- a/pkgs/development/python-modules/websockets/default.nix
+++ b/pkgs/development/python-modules/websockets/default.nix
@@ -2,7 +2,7 @@
 , stdenv
 , buildPythonPackage
 , fetchFromGitHub
-, python
+, unittestCheckHook
 , pythonOlder
 }:
 
@@ -44,11 +44,7 @@ buildPythonPackage rec {
     done
   '';
 
-  checkPhase = ''
-    runHook preCheck
-    ${python.interpreter} -m unittest discover
-    runHook postCheck
-  '';
+  checkInputs = [ unittestCheckHook ];
 
   pythonImportsCheck = [
     "websockets"
diff --git a/pkgs/development/python-modules/zake/default.nix b/pkgs/development/python-modules/zake/default.nix
index 89635a88f35ef..f144bc9d2c43c 100644
--- a/pkgs/development/python-modules/zake/default.nix
+++ b/pkgs/development/python-modules/zake/default.nix
@@ -4,7 +4,7 @@
 , kazoo
 , six
 , testtools
-, python
+, unittestCheckHook
 }:
 
 buildPythonPackage rec {
@@ -18,14 +18,15 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ kazoo six ];
   buildInputs = [ testtools ];
-  checkPhase = ''
+  checkInputs = [ unittestCheckHook ];
+  preCheck = ''
     # Skip test - fails with our new kazoo version
     substituteInPlace zake/tests/test_client.py \
       --replace "test_child_watch_no_create" "_test_child_watch_no_create"
-
-    ${python.interpreter} -m unittest discover zake/tests
   '';
 
+  unittestFlagsArray = [ "zake/tests" ];
+
   meta = with lib; {
     homepage = "https://github.com/yahoo/Zake";
     description = "A python package that works to provide a nice set of testing utilities for the kazoo library";
diff --git a/pkgs/development/python-modules/zope_copy/default.nix b/pkgs/development/python-modules/zope_copy/default.nix
index 0d1ae412262d4..be4cdca72b658 100644
--- a/pkgs/development/python-modules/zope_copy/default.nix
+++ b/pkgs/development/python-modules/zope_copy/default.nix
@@ -5,6 +5,7 @@
 , zope_interface
 , zope_location
 , zope_schema
+, unittestCheckHook
 }:
 
 
@@ -20,11 +21,9 @@ buildPythonPackage rec {
   propagatedBuildInputs = [ zope_interface ];
 
   doCheck = !isPy27; # namespace conflicts
-  checkInputs = [ zope_location zope_schema ];
+  checkInputs = [ unittestCheckHook zope_location zope_schema ];
 
-  checkPhase = ''
-    python -m unittest discover -s src/zope/copy
-  '';
+  unittestFlagsArray = [ "-s" "src/zope/copy" ];
 
   meta = {
     maintainers = with lib.maintainers; [ domenkozar ];