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.0.3";
20 pyproject = true;
21
22 src = fetchPypi {
23 inherit pname version;
24 hash = "sha256-QzdEQjUyWVVM4zWZ2otpLVqpb4l21WfUut8mM3H75JE=";
25 };
26
27 patches = [
28 # https://github.com/python-greenlet/greenlet/pull/396
29 ./python-3.13-compat.patch
30 ];
31
32 nativeBuildInputs = [ setuptools ];
33
34 # tests in passthru, infinite recursion via objgraph/graphviz
35 doCheck = false;
36
37 nativeCheckInputs = [
38 objgraph
39 psutil
40 unittestCheckHook
41 ];
42
43 preCheck = ''
44 pushd ${placeholder "out"}/${python.sitePackages}
45 '';
46
47 unittestFlagsArray = [ "greenlet.tests" ];
48
49 postCheck = ''
50 popd
51 '';
52
53 passthru.tests.pytest = greenlet.overridePythonAttrs (_: {
54 doCheck = true;
55 });
56
57 meta = with lib; {
58 changelog = "https://github.com/python-greenlet/greenlet/blob/${version}/CHANGES.rst";
59 homepage = "https://github.com/python-greenlet/greenlet";
60 description = "Module for lightweight in-process concurrent programming";
61 license = with licenses; [
62 psfl # src/greenlet/slp_platformselect.h & files in src/greenlet/platform/ directory
63 mit
64 ];
65 };
66 };
67in
68greenlet