python3Packages.attrs: separate test run into a separate tests attribute.

This resolves a circular dependency issue between pytest and attrs, by
instead building a separate output that _just_ contains the tests from
the original package, which is then consumed by a separate tests
derivation.

The downside of this approach is that these tests will not be run on
Hydra. They're not being run on Hydra at the moment, either, since
doCheck is false.
This commit is contained in:
Luke Granger-Brown
2021-06-21 16:48:39 -07:00
committed by Jonathan Ringer
parent fe2d2498c9
commit 3d568360e7
2 changed files with 39 additions and 9 deletions
@@ -1,5 +1,8 @@
{ lib, stdenv, buildPythonPackage, fetchPypi, pytest, hypothesis, zope_interface
, pympler, coverage, six, clang }:
{ lib
, callPackage
, buildPythonPackage
, fetchPypi
}:
buildPythonPackage rec {
pname = "attrs";
@@ -10,18 +13,24 @@ buildPythonPackage rec {
sha256 = "ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb";
};
# macOS needs clang for testing
checkInputs = [
pytest hypothesis zope_interface pympler coverage six
] ++ lib.optionals (stdenv.isDarwin) [ clang ];
outputs = [ "out" "testout" ];
checkPhase = ''
py.test
postInstall = ''
# Install tests as the tests output.
mkdir $testout
cp -R tests $testout/tests
'';
# To prevent infinite recursion with pytest
pythonImportsCheck = [ "attr" ];
# pytest depends on attrs, so we can't do this out-of-the-box.
# Instead, we do this as a passthru.tests test.
doCheck = false;
passthru.tests = {
pytest = callPackage ./tests.nix { };
};
meta = with lib; {
description = "Python attributes without boilerplate";
homepage = "https://github.com/hynek/attrs";
@@ -0,0 +1,21 @@
{ buildPythonPackage
, pytestCheckHook
, attrs
, hypothesis
}:
buildPythonPackage {
pname = "attrs-tests";
inherit (attrs) version;
srcs = attrs.testout;
dontBuild = true;
dontInstall = true;
checkInputs = [
attrs
hypothesis
pytestCheckHook
];
}