Files

88 lines
2.6 KiB
TOML

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "staffml-vault"
version = "0.1.0"
description = "CLI for the StaffML question vault — authoring, building, and releasing the corpus."
readme = "README.md"
requires-python = ">=3.12"
authors = [{ name = "Vijay Janapa Reddi" }]
license = { text = "MIT" }
keywords = ["staffml", "vault", "ml-systems", "interviews"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
"Intended Audience :: Education",
"License :: OSI Approved :: MIT License",
"Operating System :: MacOS",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Database",
]
dependencies = [
"typer>=0.12",
"rich>=13",
"pydantic>=2.7",
"pyyaml>=6",
"click>=8",
"jsonschema>=4.20",
]
[project.optional-dependencies]
dev = [
"pytest>=8",
"pytest-cov>=5",
"pytest-timeout>=2",
"mypy>=1.10",
"ruff>=0.5",
]
[project.scripts]
vault = "vault_cli.main:app"
[project.urls]
Homepage = "https://staffml.mlsysbook.ai"
Architecture = "https://github.com/harvard-edge/cs249r_book/blob/dev/staffml/vault/ARCHITECTURE.md"
Review-Ledger = "https://github.com/harvard-edge/cs249r_book/blob/dev/staffml/vault/REVIEWS.md"
[tool.hatch.build.targets.wheel]
packages = ["src/vault_cli"]
[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "-x --strict-markers --timeout=60"
[tool.ruff]
line-length = 100
target-version = "py312"
[tool.ruff.lint]
select = ["E", "F", "W", "I", "B", "UP", "N", "SIM"]
ignore = [
"E501", # line-length handled by formatter
"B008", # function-call-in-default-argument — this is THE Typer idiom
# (`typer.Option(...)` / `typer.Argument(...)` at parameter
# default position). Lint doesn't know that.
"UP042", # replace-str-enum — Python 3.12 StrEnum differs semantically;
# our (str, Enum) mixins stay for explicit behavior.
]
[tool.ruff.lint.per-file-ignores]
# Scripts that run standalone insert sys.path before importing vault_cli;
# that's intentional so they work both as modules and as scripts.
"scripts/*.py" = ["E402"]
# Cycle-detection colors WHITE/GRAY/BLACK are a conventional constant set,
# and are local to one function.
"src/vault_cli/validator.py" = ["N806"]
# sqlite3.Row iterates as values, not keys; SIM118 fires a false positive.
"src/vault_cli/commands/diff_cmd.py" = ["SIM118"]
"src/vault_cli/commands/serve_api.py" = ["SIM118"]
[tool.mypy]
python_version = "3.12"
strict = true