Merge pull request #307098 from r-ryantm/auto-update/cilium-cli
[NixPkgs.git] / pkgs / development / python-modules / mypy / default.nix
blobc94b83bbb4fb9385e39cf227ec34c0e00ddbc66b
1 { lib
2 , stdenv
3 , buildPythonPackage
4 , fetchFromGitHub
5 , pythonAtLeast
6 , pythonOlder
8 # build-system
9 , setuptools
10 , types-psutil
11 , types-setuptools
12 , wheel
14 # propagates
15 , mypy-extensions
16 , tomli
17 , typing-extensions
19 # optionals
20 , lxml
21 , psutil
23 # tests
24 , attrs
25 , filelock
26 , pytest-xdist
27 , pytestCheckHook
30 buildPythonPackage rec {
31   pname = "mypy";
32   version = "1.9.0";
33   pyproject = true;
35   disabled = pythonOlder "3.8";
37   src = fetchFromGitHub {
38     owner = "python";
39     repo = "mypy";
40     rev = "refs/tags/${version}";
41     hash = "sha256-uOOZX8bKRunTOgYVbmetu2m0B7kijxBgWdNiLCAhiQ4=";
42   };
44   build-system = [
45     mypy-extensions
46     setuptools
47     types-psutil
48     types-setuptools
49     typing-extensions
50     wheel
51   ] ++ lib.optionals (pythonOlder "3.11") [
52     tomli
53   ];
55   dependencies = [
56     mypy-extensions
57     typing-extensions
58   ] ++ lib.optionals (pythonOlder "3.11") [
59     tomli
60   ];
62   optional-dependencies = {
63     dmypy = [
64       psutil
65     ];
66     reports = [
67       lxml
68     ];
69   };
71   # Compile mypy with mypyc, which makes mypy about 4 times faster. The compiled
72   # version is also the default in the wheels on Pypi that include binaries.
73   # is64bit: unfortunately the build would exhaust all possible memory on i686-linux.
74   env.MYPY_USE_MYPYC = stdenv.buildPlatform.is64bit;
76   # when testing reduce optimisation level to reduce build time by 20%
77   env.MYPYC_OPT_LEVEL = 1;
79   pythonImportsCheck = [
80     "mypy"
81     "mypy.api"
82     "mypy.fastparse"
83     "mypy.types"
84     "mypyc"
85     "mypyc.analysis"
86   ] ++ lib.optionals (!stdenv.hostPlatform.isi686) [
87     # ImportError: cannot import name 'map_instance_to_supertype' from partially initialized module 'mypy.maptype' (most likely due to a circular import)
88     "mypy.report"
89   ];
91   nativeCheckInputs = [
92     attrs
93     filelock
94     pytest-xdist
95     pytestCheckHook
96     setuptools
97     tomli
98   ] ++ lib.flatten (lib.attrValues optional-dependencies);
100   disabledTests = [
101     # fails with typing-extensions>=4.10
102     # https://github.com/python/mypy/issues/17005
103     "test_runtime_typing_objects"
104   ] ++ lib.optionals (pythonAtLeast "3.12") [
105     # requires distutils
106     "test_c_unit_test"
107   ];
109   disabledTestPaths = [
110     # fails to find tyoing_extensions
111     "mypy/test/testcmdline.py"
112     "mypy/test/testdaemon.py"
113     # fails to find setuptools
114     "mypyc/test/test_commandline.py"
115     # fails to find hatchling
116     "mypy/test/testpep561.py"
117   ] ++ lib.optionals stdenv.hostPlatform.isi686 [
118     # https://github.com/python/mypy/issues/15221
119     "mypyc/test/test_run.py"
120   ];
122   meta = with lib; {
123     description = "Optional static typing for Python";
124     homepage = "https://www.mypy-lang.org";
125     license = licenses.mit;
126     mainProgram = "mypy";
127     maintainers = with maintainers; [ lnl7 ];
128   };