162d0926f9
`mypy` will check *all* imported packages, even optional dependencies outside your project, and this can cause issues if you are targeting python versions *older* than the one you're running in. `mypy` will report issues in the latest versions of dependencies as errors even if installing on some older python would have installed an older version of the dependency. We saw this problem before with `numpy` in #34732. We've started seeing it with IPython in #38704. This fixes the issue by exempting `IPython` and a number of other imports of Spack's from `mypy` checking.
257 lines
5.7 KiB
TOML
257 lines
5.7 KiB
TOML
[project]
|
|
name="spack"
|
|
description="The spack package manager"
|
|
dependencies=[
|
|
"clingo",
|
|
"setuptools",
|
|
]
|
|
dynamic = ["version"]
|
|
|
|
[project.scripts]
|
|
spack = "lib.spack.spack_installable.main:main"
|
|
|
|
[tool.hatch.version]
|
|
path = "lib/spack/spack/__init__.py"
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pip>=21.3",
|
|
"pytest",
|
|
"pytest-xdist",
|
|
"setuptools",
|
|
"click",
|
|
'black',
|
|
"mypy",
|
|
"isort",
|
|
"flake8",
|
|
"vermin",
|
|
]
|
|
ci = [
|
|
"pytest-cov",
|
|
"codecov[toml]",
|
|
]
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.hatch.build.targets.wheel]
|
|
include = [
|
|
"/bin",
|
|
"/etc",
|
|
"/lib",
|
|
"/share",
|
|
"/var",
|
|
"CITATION.cff",
|
|
"COPYRIGHT",
|
|
"LICENSE-APACHE",
|
|
"LICENSE-MIT",
|
|
"NOTICE",
|
|
"README.md",
|
|
"SECURITY.md",
|
|
]
|
|
|
|
[tool.hatch.envs.default]
|
|
features = [
|
|
"dev",
|
|
]
|
|
|
|
[tool.hatch.envs.default.scripts]
|
|
spack = "./bin/spack"
|
|
style = "./bin/spack style"
|
|
test = "./bin/spack unit-test"
|
|
|
|
[tool.hatch.envs.ci]
|
|
features = [
|
|
"dev",
|
|
"ci",
|
|
]
|
|
|
|
[tool.black]
|
|
line-length = 99
|
|
target-version = ['py36', 'py37', 'py38', 'py39', 'py310']
|
|
include = '''
|
|
\.pyi?$
|
|
'''
|
|
extend-exclude = '''
|
|
/(
|
|
\.git
|
|
| \.mypy_cache
|
|
| ^lib/spack/external/
|
|
| ^opt/
|
|
)/
|
|
'''
|
|
skip_magic_trailing_comma = true
|
|
|
|
[tool.isort]
|
|
line_length = 99
|
|
profile = "black"
|
|
sections = [
|
|
"FUTURE",
|
|
"STDLIB",
|
|
"THIRDPARTY",
|
|
"ARCHSPEC", "LLNL", "FIRSTPARTY",
|
|
"LOCALFOLDER",
|
|
]
|
|
known_first_party = "spack"
|
|
known_archspec = "archspec"
|
|
known_llnl = "llnl"
|
|
known_third_party = ["ruamel", "six"]
|
|
src_paths = "lib"
|
|
honor_noqa = true
|
|
|
|
[tool.mypy]
|
|
python_version = 3.7
|
|
files = ['lib/spack/llnl/**/*.py', 'lib/spack/spack/**/*.py', './var/spack/repos/builtin/packages/*/package.py']
|
|
mypy_path = ['bin', 'lib/spack', 'lib/spack/external', 'var/spack/repos/builtin']
|
|
allow_redefinition = true
|
|
|
|
# This and a generated import file allows supporting packages
|
|
namespace_packages = true
|
|
|
|
# To avoid re-factoring all the externals, ignore errors and missing imports
|
|
# globally, then turn back on in spack and spack submodules
|
|
ignore_errors = true
|
|
ignore_missing_imports = true
|
|
|
|
[[tool.mypy.overrides]]
|
|
module = 'spack.*'
|
|
ignore_errors = false
|
|
ignore_missing_imports = false
|
|
|
|
[[tool.mypy.overrides]]
|
|
module = 'packages.*'
|
|
ignore_errors = false
|
|
ignore_missing_imports = false
|
|
# we can't do this here, not a module scope option, in spack style instead
|
|
# disable_error_code = 'no-redef'
|
|
|
|
[[tool.mypy.overrides]]
|
|
module = 'llnl.*'
|
|
ignore_errors = false
|
|
ignore_missing_imports = false
|
|
|
|
[[tool.mypy.overrides]]
|
|
module = 'spack.test.packages'
|
|
ignore_errors = true
|
|
|
|
# ignore errors in fake import path for packages
|
|
[[tool.mypy.overrides]]
|
|
module = 'spack.pkg.*'
|
|
ignore_errors = true
|
|
ignore_missing_imports = true
|
|
|
|
# Spack imports a number of external packages, and they *may* require Python 3.8 or
|
|
# higher in recent versions. This can cause mypy to fail because we check for 3.7
|
|
# compatibility. We could restrict mypy to run for the oldest supported version (3.7),
|
|
# but that means most developers won't be able to run mypy, which means it'll fail
|
|
# more in CI. Instead, we exclude these imported packages from mypy checking.
|
|
[[tool.mypy.overrides]]
|
|
module = [
|
|
'IPython',
|
|
'altgraph',
|
|
'attr',
|
|
'boto3',
|
|
'botocore',
|
|
'distro',
|
|
'jinja2',
|
|
'jsonschema',
|
|
'macholib',
|
|
'markupsafe',
|
|
'numpy',
|
|
'pyristent',
|
|
'pytest',
|
|
'ruamel.yaml',
|
|
'six',
|
|
]
|
|
follow_imports = 'skip'
|
|
follow_imports_for_stubs = true
|
|
|
|
[tool.pyright]
|
|
useLibraryCodeForTypes = true
|
|
reportMissingImports = true
|
|
reportWildcardImportFromLibrary = false
|
|
include = ['lib/spack']
|
|
ignore = ['lib/spack/external']
|
|
extraPaths = ['lib/spack', 'lib/spack/external']
|
|
|
|
|
|
[tool.coverage.run]
|
|
parallel = true
|
|
concurrency = ["multiprocessing"]
|
|
branch = true
|
|
source = ["bin", "lib"]
|
|
data_file = "./tests-coverage/.coverage"
|
|
omit = [
|
|
'lib/spack/spack/test/*',
|
|
'lib/spack/docs/*',
|
|
'lib/spack/external/*',
|
|
'share/spack/qa/*',
|
|
]
|
|
|
|
[tool.coverage.report]
|
|
# Regexes for lines to exclude from consideration
|
|
exclude_lines = [
|
|
# Have to re-enable the standard pragma
|
|
'pragma: no cover',
|
|
|
|
# Don't complain about missing debug-only code:
|
|
'def __repr__',
|
|
'if self\.debug',
|
|
|
|
# Don't complain if tests don't hit defensive assertion code:
|
|
'raise AssertionError',
|
|
'raise NotImplementedError',
|
|
|
|
# Don't complain if non-runnable code isn't run:
|
|
'if 0:',
|
|
'if False:',
|
|
'if __name__ == .__main__.:',
|
|
]
|
|
ignore_errors = true
|
|
|
|
[tool.coverage.html]
|
|
directory = "htmlcov"
|
|
|
|
[tool.vendoring]
|
|
destination = "lib/spack/external/_vendoring"
|
|
requirements = "lib/spack/external/vendor.txt"
|
|
namespace = ""
|
|
|
|
protected-files = ["__init__.py", "README.rst", "vendor.txt"]
|
|
patches-dir = "lib/spack/external/patches"
|
|
|
|
[tool.vendoring.transformations]
|
|
substitute = [
|
|
]
|
|
drop = [
|
|
# contains unnecessary scripts
|
|
"bin/",
|
|
# interpreter and OS specific msgpack libs
|
|
"msgpack/*.so",
|
|
# unneeded parts of setuptools
|
|
"easy_install.py",
|
|
"setuptools",
|
|
"pkg_resources/_vendor/",
|
|
"pkg_resources/extern/",
|
|
# trim vendored pygments styles and lexers
|
|
"pygments/styles/[!_]*.py",
|
|
'^pygments/lexers/(?!python|__init__|_mapping).*\.py$',
|
|
# trim rich's markdown support
|
|
"rich/markdown.py",
|
|
# ruamel.yaml installs unneded files
|
|
"ruamel.*.pth",
|
|
"pvectorc.*.so"
|
|
]
|
|
|
|
[tool.vendoring.typing-stubs]
|
|
six = ["six.__init__", "six.moves.__init__", "six.moves.configparser"]
|
|
distro = []
|
|
|
|
[tool.vendoring.license.directories]
|
|
setuptools = "pkg_resources"
|
|
|
|
[tool.vendoring.license.fallback-urls]
|
|
CacheControl = "https://raw.githubusercontent.com/ionrock/cachecontrol/v0.12.6/LICENSE.txt"
|
|
distlib = "https://bitbucket.org/pypa/distlib/raw/master/LICENSE.txt"
|
|
webencodings = "https://github.com/SimonSapin/python-webencodings/raw/master/LICENSE"
|