about summary refs log tree commit diff
path: root/pkgs/development/python2-modules/pytest/default.nix
diff options
context:
space:
mode:
authorFrederik Rietdijk <fridh@fridh.nl>2022-01-16 07:34:26 +0100
committerFrederik Rietdijk <freddyrietdijk@fridh.nl>2022-01-16 10:00:16 +0100
commitae18d68b6b117528e6cd72325ead36b48562d43f (patch)
tree9f9d765a7208d5d436184dc3656b164fd0581f7f /pkgs/development/python2-modules/pytest/default.nix
parent2027fb600d891379c53c4762463e65d040359682 (diff)
python2.pkgs: move expressions into python2-modules/ folder
Another step in further separating python2 from python3.
Diffstat (limited to 'pkgs/development/python2-modules/pytest/default.nix')
-rw-r--r--pkgs/development/python2-modules/pytest/default.nix68
1 files changed, 68 insertions, 0 deletions
diff --git a/pkgs/development/python2-modules/pytest/default.nix b/pkgs/development/python2-modules/pytest/default.nix
new file mode 100644
index 0000000000000..0a0ae571ba012
--- /dev/null
+++ b/pkgs/development/python2-modules/pytest/default.nix
@@ -0,0 +1,68 @@
+{ lib, buildPythonPackage, pythonOlder, fetchPypi, attrs, hypothesis, py
+, setuptools-scm, setuptools, six, pluggy, funcsigs, isPy3k, more-itertools
+, atomicwrites, mock, writeText, pathlib2, wcwidth, packaging, isPyPy
+}:
+buildPythonPackage rec {
+  version = "4.6.11";
+  pname = "pytest";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "50fa82392f2120cc3ec2ca0a75ee615be4c479e66669789771f1758332be4353";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "pluggy>=0.12,<1.0" "pluggy>=0.12,<2.0"
+  '';
+
+  checkInputs = [ hypothesis mock ];
+  buildInputs = [ setuptools-scm ];
+  propagatedBuildInputs = [ attrs py setuptools six pluggy more-itertools atomicwrites wcwidth packaging ]
+    ++ lib.optionals (!isPy3k) [ funcsigs ]
+    ++ lib.optionals (pythonOlder "3.6") [ pathlib2 ];
+
+  doCheck = !isPyPy; # https://github.com/pytest-dev/pytest/issues/3460
+  checkPhase = ''
+    runHook preCheck
+
+    # don't test bash builtins
+    rm testing/test_argcomplete.py
+
+    # determinism - this test writes non deterministic bytecode
+    rm -rf testing/test_assertrewrite.py
+
+    PYTHONDONTWRITEBYTECODE=1 $out/bin/py.test -x testing/ -k "not test_collect_pyargs_with_testpaths"
+    runHook postCheck
+  '';
+
+  # Remove .pytest_cache when using py.test in a Nix build
+  setupHook = writeText "pytest-hook" ''
+    pytestcachePhase() {
+        find $out -name .pytest_cache -type d -exec rm -rf {} +
+    }
+
+    preDistPhases+=" pytestcachePhase"
+
+    # pytest generates it's own bytecode files to improve assertion messages.
+    # These files similar to cpython's bytecode files but are never laoded
+    # by python interpreter directly. We remove them for a few reasons:
+    # - files are non-deterministic: https://github.com/NixOS/nixpkgs/issues/139292
+    #   (file headers are generatedt by pytest directly and contain timestamps)
+    # - files are not needed after tests are finished
+    pytestRemoveBytecodePhase () {
+        # suffix is defined at:
+        #    https://github.com/pytest-dev/pytest/blob/4.6.11/src/_pytest/assertion/rewrite.py#L32-L47
+        find $out -name "*-PYTEST.py[co]" -delete
+    }
+    preDistPhases+=" pytestRemoveBytecodePhase"
+  '';
+
+  meta = with lib; {
+    homepage = "https://docs.pytest.org";
+    description = "Framework for writing tests";
+    maintainers = with maintainers; [ domenkozar lovek323 madjar lsix ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}