[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/ )/ ''' [tool.isort] 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 # pytest (which we depend on) optionally imports numpy, which requires Python 3.8 in # recent versions. mypy still imports its .pyi file, which has positional-only # arguments, which don't work in 3.7, which causes mypy to bail out early if you have # numpy installed. [[tool.mypy.overrides]] module = 'numpy' 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", ] [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"