1{
2 lib,
3 buildPythonPackage,
4 fetchPypi,
5
6 # build-system
7 setuptools,
8
9 # tests
10 objgraph,
11 psutil,
12 python,
13 unittestCheckHook,
14}:
15
16let
17 greenlet = buildPythonPackage rec {
18 pname = "greenlet";
19 version = "3.2.1";
20 pyproject = true;
21
22 src = fetchPypi {
23 inherit pname version;
24 hash = "sha256-n03UtJRrFLs78Dj4Hh0uU1t9lPGypZ/boSk82cGgpNc=";
25 };
26
27 build-system = [ setuptools ];
28
29 # tests in passthru, infinite recursion via objgraph/graphviz
30 doCheck = false;
31
32 nativeCheckInputs = [
33 objgraph
34 psutil
35 unittestCheckHook
36 ];
37
38 preCheck = ''
39 pushd ${placeholder "out"}/${python.sitePackages}
40 '';
41
42 unittestFlagsArray = [ "greenlet.tests" ];
43
44 postCheck = ''
45 popd
46 '';
47
48 passthru.tests.pytest = greenlet.overridePythonAttrs (_: {
49 doCheck = true;
50 });
51
52 meta = with lib; {
53 changelog = "https://github.com/python-greenlet/greenlet/blob/${version}/CHANGES.rst";
54 homepage = "https://github.com/python-greenlet/greenlet";
55 description = "Module for lightweight in-process concurrent programming";
56 license = with licenses; [
57 psfl # src/greenlet/slp_platformselect.h & files in src/greenlet/platform/ directory
58 mit
59 ];
60 };
61 };
62in
63greenlet