| [build-system] |
| build-backend = "hatchling.build" |
| requires = [ |
| "hatch-vcs>=0.4", |
| "hatchling>=1.18", |
| ] |
| |
| [project] |
| name = "platformdirs" |
| description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." |
| readme = "README.rst" |
| keywords = [ |
| "appdirs", |
| "application", |
| "cache", |
| "directory", |
| "log", |
| "user", |
| ] |
| license = "MIT" |
| maintainers = [ |
| { name = "Bernát Gábor", email = "gaborjbernat@gmail.com" }, |
| { name = "Julian Berman", email = "Julian@GrayVines.com" }, |
| { name = "Ofek Lev", email = "oss@ofek.dev" }, |
| { name = "Ronny Pfannschmidt", email = "opensource@ronnypfannschmidt.de" }, |
| ] |
| requires-python = ">=3.8" |
| classifiers = [ |
| "Development Status :: 5 - Production/Stable", |
| "Intended Audience :: Developers", |
| "License :: OSI Approved :: MIT License", |
| "Operating System :: OS Independent", |
| "Programming Language :: Python", |
| "Programming Language :: Python :: 3 :: Only", |
| "Programming Language :: Python :: 3.8", |
| "Programming Language :: Python :: 3.9", |
| "Programming Language :: Python :: 3.10", |
| "Programming Language :: Python :: 3.11", |
| "Programming Language :: Python :: 3.12", |
| "Programming Language :: Python :: Implementation :: CPython", |
| "Programming Language :: Python :: Implementation :: PyPy", |
| "Topic :: Software Development :: Libraries :: Python Modules", |
| ] |
| dynamic = [ |
| "version", |
| ] |
| optional-dependencies.docs = [ |
| "furo>=2023.9.10", |
| "proselint>=0.13", |
| "sphinx>=7.2.6", |
| "sphinx-autodoc-typehints>=1.25.2", |
| ] |
| optional-dependencies.test = [ |
| "appdirs==1.4.4", |
| "covdefaults>=2.3", |
| "pytest>=7.4.3", |
| "pytest-cov>=4.1", |
| "pytest-mock>=3.12", |
| ] |
| optional-dependencies.type = [ |
| "mypy>=1.8", |
| ] |
| urls.Documentation = "https://platformdirs.readthedocs.io" |
| urls.Homepage = "https://github.com/platformdirs/platformdirs" |
| urls.Source = "https://github.com/platformdirs/platformdirs" |
| urls.Tracker = "https://github.com/platformdirs/platformdirs/issues" |
| |
| [tool.hatch] |
| build.hooks.vcs.version-file = "src/platformdirs/version.py" |
| build.targets.sdist.include = ["/src", "/tests", "/tox.ini"] |
| version.source = "vcs" |
| |
| [tool.hatch.envs.default] |
| description = "Development environment" |
| features = ["test", "docs", "type"] |
| scripts = { show = ["python -m pip list --format=columns", 'python -c "import sys; print(sys.executable)"'] } |
| |
| [tool.hatch.envs.test] |
| template = "test" |
| # dev-mode = false # cannot enable this until https://github.com/pypa/hatch/issues/1237 |
| description = "Run the test suite" |
| matrix = [{ python = ["3.12", "3.11", "3.10", "3.9", "3.8", "pypy3.9"] }] |
| features = ["test"] |
| env-vars = { COVERAGE_FILE = "report/.coverage.{matrix:python}", COVERAGE_PROCESS_START = "pyproject.toml", _COVERAGE_SRC = "src/platformdirs" } |
| [tool.hatch.envs.test.scripts] |
| run = [""" |
| pytest --junitxml report/junit.{matrix:python}.xml --cov src/platformdirs --cov tests \ |
| --cov-config=pyproject.toml --no-cov-on-fail --cov-report term-missing:skip-covered --cov-context=test \ |
| --cov-report html:report/html{matrix:python} --cov-report xml:report/coverage{matrix:python}.xml \ |
| tests |
| """] |
| |
| [tool.hatch.envs.coverage] |
| template = "coverage" |
| description = "combine coverage files and generate diff" |
| dependencies = ["covdefaults>=2.3", "coverage[toml]>=7.3.2", "diff-cover>=8.0.1"] |
| env-vars = { COVERAGE_FILE = "report/.coverage" } |
| [tool.hatch.envs.coverage.scripts] |
| run = [ |
| "coverage combine report", |
| "coverage report --skip-covered --show-missing", |
| "coverage xml -o report/coverage.xml", |
| "coverage html -d report/html", |
| "diff-cover --compare-branch {env:DIFF_AGAINST:origin/main} report/coverage.xml", |
| ] |
| |
| [tool.hatch.envs.type] |
| template = "type" |
| description = "Run the type checker" |
| python = "3.12" |
| dev-mode = false |
| features = ["type", "test"] |
| scripts = { run = ["mypy --strict src", "mypy --strict tests"] } |
| |
| [tool.hatch.envs.fix] |
| template = "fix" |
| description = "Run the pre-commit tool to lint and autofix issues" |
| python = "3.12" |
| detached = true |
| dependencies = ["pre-commit>=3.6"] |
| scripts = { "run" = ["pre-commit run --all-files --show-diff-on-failure"] } |
| |
| [tool.hatch.envs.docs] |
| template = "docs" |
| description = "Build documentation using Sphinx" |
| python = "3.12" |
| dev-mode = false |
| features = ["docs"] |
| [tool.hatch.envs.docs.scripts] |
| build = [ |
| """python -c "import glob; import subprocess; subprocess.call(['proselint'] + glob.glob('docs/*.rst'))" """, |
| """python -c "from shutil import rmtree; rmtree('docs/build', ignore_errors=True)" """, |
| "sphinx-build -d docs/build/tree docs docs/build --color -b html", |
| """python -c "from pathlib import Path; p=(Path('docs')/'build'/'index.html').absolute().as_uri(); print('Documentation built under '+p)" """, |
| ] |
| |
| [tool.hatch.envs.readme] |
| template = "readme" |
| description = "check that the long description is valid" |
| python = "3.12" |
| dependencies = ["build[virtualenv]>=1.0.3", "twine>=4.0.2", "check-wheel-contents>=0.6.0"] |
| scripts = { "run" = ["python -m build -o dist", "twine check dist/*.whl dist/*.tar.gz", "check-wheel-contents dist"] } |
| |
| [tool.ruff] |
| select = ["ALL"] |
| line-length = 120 |
| target-version = "py38" |
| isort = { known-first-party = ["platformdirs", "tests"], required-imports = ["from __future__ import annotations"] } |
| ignore = [ |
| "ANN101", # Missing type annotation for `self` in method |
| "D301", # Use `r"""` if any backslashes in a docstring |
| "D205", # 1 blank line required between summary line and description |
| "D401", # The first line of docstring should be in imperative mood |
| "D203", # `one-blank-line-before-class` (D203) and `no-blank-line-before-class` (D211) are incompatible |
| "D212", # `multi-line-summary-first-line` (D212) and `multi-line-summary-second-line` (D213) are incompatible |
| "S104", # Possible binding to all interfaces |
| "CPY", # no copyright notices |
| ] |
| format.preview = true |
| lint.preview = true |
| [tool.ruff.per-file-ignores] |
| "tests/**/*.py" = [ |
| "S101", # asserts allowed in tests... |
| "FBT", # don"t care about booleans as positional arguments in tests |
| "INP001", # no implicit namespace |
| "D", # don't care about documentation in tests |
| "S603", # `subprocess` call: check for execution of untrusted input |
| "PLR2004", # Magic value used in comparison, consider replacing with a constant variable |
| "PLC2701", # Private name import |
| "PLR0917", # Too many positional arguments |
| ] |
| |
| [tool.codespell] |
| builtin = "clear,usage,en-GB_to_en-US" |
| count = true |
| quiet-level = 3 |
| |
| [tool.docformatter] |
| blank = true |
| recursive = true |
| pre-summary-newline = true |
| wrap-descriptions = 120 |
| wrap-summaries = 120 |
| |
| [tool.coverage] |
| html.show_contexts = true |
| html.skip_covered = false |
| run.relative_files = true |
| paths.source = ["src", "**/site-packages"] |
| report.fail_under = 76 |
| run.parallel = true |
| run.plugins = ["covdefaults"] |
| |
| [tool.mypy] |
| python_version = "3.11" |
| show_error_codes = true |
| strict = true |
| overrides = [{ module = ["appdirs.*", "jnius.*"], ignore_missing_imports = true }] |