[project]
name = "system_tools"
version = "0.1.0"
description = ""
authors = [{ name = "Richie Cahill", email = "richie@tmmworkshop.com" }]
requires-python = "~=3.13.0"
readme = "README.md"
license = "MIT"
# these dependencies are a best effort and aren't guaranteed to work
# for up-to-date dependencies, see overlays/default.nix
dependencies = [
    "alembic",
    "apprise",
    "apscheduler",
    "huggingface-hub",
    "httpx",
    "python-multipart",
    "polars",
    "psycopg[binary]",
    "pydantic",
    "pyyaml",
    "sqlalchemy",
    "typer",
    "websockets",
]

[project.scripts]
database = "python.database_cli:app"
van-inventory = "python.van_inventory.main:serve"
prompt-bench = "python.prompt_bench.main:cli"
prompt-bench-download = "python.prompt_bench.downloader:cli"
finetune = "python.prompt_bench.finetune:cli"
finetune-container = "python.prompt_bench.finetune_container:cli"
build-finetune-dataset = "python.prompt_bench.build_finetune_dataset:cli"

[dependency-groups]
dev = [
    "mypy",
    "pyfakefs",
    "pytest-cov",
    "pytest-mock",
    "pytest-xdist",
    "pytest",
    "ruff",
]

[tool.ruff]

target-version = "py313"

line-length = 120

lint.select = ["ALL"]
lint.ignore = [
    "G004",   # (PERM) This is a performers nit
    "COM812", # (TEMP) conflicts when used with the formatter
    "ISC001", # (TEMP) conflicts when used with the formatter
    "S603",   # (PERM) This is known to cause a false positive
]

[tool.ruff.lint.per-file-ignores]

"tests/**" = [
    "ANN",     # (perm) type annotations not needed in tests
    "D",       # (perm) docstrings not needed in tests
    "PLR2004", # (perm) magic values are fine in test assertions
    "S101",    # (perm) pytest needs asserts
]
"python/stuff/**" = [
    "T201", # (perm) I don't care about print statements dir
]
"python/testing/**" = [
    "T201",   # (perm) I don't care about print statements dir
    "ERA001", # (perm) I don't care about print statements dir
]
"python/splendor/**" = [
    "S311",    # (perm) there is no security issue here
    "T201",    # (perm) I don't care about print statements dir
    "PLR2004", # (temps) need to think about this
]
"python/orm/**" = [
    "TC003", # (perm) this creates issues because sqlalchemy uses these at runtime
]
"python/congress_tracker/**" = [
    "TC003", # (perm) this creates issues because sqlalchemy uses these at runtime
]
"python/eval_warnings/**" = [
    "S607", # (perm) gh and git are expected on PATH in the runner environment
]
"python/prompt_bench/**" = [
    "FBT002",  # (perm) typer requires boolean defaults for --flag/--no-flag options
    "PLR0913", # (perm) typer CLIs naturally have many parameters
    "S607",    # (perm) docker and nvidia-smi are expected on PATH
]
"python/alembic/**" = [
    "INP001", # (perm) this creates LSP issues for alembic
]
"python/signal_bot/**" = [
    "D107", # (perm) class docstrings cover __init__
]

[tool.ruff.lint.pydocstyle]
convention = "google"

[tool.ruff.lint.flake8-builtins]
builtins-ignorelist = ["id"]

[tool.ruff.lint.pylint]
max-args = 9

[tool.coverage.run]
source = ["system_tools"]

[tool.coverage.report]
exclude_lines = [
    "pragma: no cover",
    "if TYPE_CHECKING:",
    "raise NotImplementedError",
    "if __name__ == \"__main__\":",
]

[tool.pytest.ini_options]
addopts = "-n auto -ra"
testpaths = ["tests"]
# --cov=system_tools --cov-report=term-missing --cov-report=xml --cov-report=html --cov-branch
