[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"