blob: 7a5f34a311256a36951feafe4488987d984114cb [file] [edit]
[build-system]
requires = [
"setuptools==80.9.0",
]
build-backend = "setuptools.build_meta"
[project]
dynamic = ["version"]
name = "ds_store"
description = "Manipulate Finder .DS_Store files from Python"
readme = "README.rst"
requires-python = ">= 3.10"
license = "MIT"
license-files = [
"LICENSE",
]
authors = [
{name="Alastair Houghton", email="alastair@alastairs-place.net"}
]
maintainers = [
{name="Russell Keith-Magee", email="russell@keith-magee.com"}
]
keywords = [
"DS_Store"
]
classifiers = [
"Development Status :: 5 - Production/Stable",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Programming Language :: Python :: 3.15",
"Programming Language :: Python :: 3 :: Only",
"Topic :: Desktop Environment",
"Topic :: Software Development :: Libraries :: Python Modules",
]
dependencies = [
"mac_alias >= 2.2.2",
]
[project.urls]
Documentation = "https://ds-store.readthedocs.io/en/latest/"
Homepage = "https://github.com/dmgbuild/ds_store"
Tracker = "https://github.com/dmgbuild/ds_store/issues"
Source = "https://github.com/dmgbuild/ds_store"
[project.scripts]
ds_store = "ds_store.__main__:main"
[dependency-groups]
package = [
"build == 1.3.0",
"twine == 6.2.0",
]
pre-commit = [
"prek == 0.2.23",
]
test = [
"coverage == 7.13.0",
"pytest == 9.0.2",
]
tox = [
"tox-uv == 1.29.0"
]
dev = [
{include-group = "pre-commit"},
{include-group = "test"},
{include-group = "tox"},
]
# Docs are always built on Py3.12; see RTD and tox config files.
docs = [
"furo == 2025.12.19",
"sphinx == 8.2.3",
]
[tool.setuptools.dynamic]
version = {attr = "ds_store.__version__"}
[tool.coverage.run]
branch = true
relative_files = true
source_pkgs = ["ds_store"]
[tool.coverage.paths]
source = [
"src",
"**/site-packages",
]
[tool.coverage.report]
show_missing = true
skip_covered = true
skip_empty = true
precision = 1
exclude_lines = [
"pragma: no cover",
"@(abc\\.)?abstractmethod",
"NotImplementedError\\(\\)",
"if TYPE_CHECKING:",
]
[tool.ruff.lint]
# In addition to the default rules, these additional rules will be used:
extend-select = [
"E", # pycodestyle
"W", # pycodestyle
"F", # pyflakes
"UP", # pyupgrade
# "B", # flake8-bugbear
"YTT", # flake8-2020
"ASYNC", # flake8-async
"C4", # flake8-comprehensions
"I", # isort
# "RUF", # ruff-specific rules
"PT", # flake8-pytest-style
"FURB", # refurb
"ISC", # flake8-implicit-str-concat
"PGH", # pygrep-hooks
"T20", # flake8-print
"PIE", # flake8-pie
# "SIM", # flake8-simplify
]
[tool.ruff.lint.per-file-ignores]
# E501: line too long
"tests/examples/settings.py" = ["E501"]