[project]
name = "beats"
version = "0.3.0"
description = "A way to keep track of how I spend my time"
authors = [{ name = "Ahmed Elghareeb", email = "me@rancho.me" }]
readme = "README.md"
requires-python = ">=3.14"
dependencies = [
"dnspython>=2.7",
"fastapi>=0.115",
"pydantic>=2.12",
"pydantic-settings>=2.9",
"pymongo>=4.13",
"python-dotenv>=1.0",
"uvicorn>=0.34",
]
[dependency-groups]
dev = [
"ipython~=9.0",
"ruff~=0.6",
"pytest~=8.3",
"pytest-cov~=5.0",
"httpx~=0.27",
]
[build-system]
requires = ["hatchling>=1.25"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/beats"]
[tool.hatch.build.targets.sdist]
include = ["src/beats", "README.md", "LICENSE"]
[tool.ruff]
# Target the runtime set in Docker and CI; ruff uses this to enable proper lint rules.
target-version = "py314"
line-length = 100
src = ["src"]
[tool.ruff.lint]
# A focused, low-noise ruleset: errors (E), pyflakes (F), isort (I), bugbear (B), pyupgrade (UP)
select = ["E", "F", "I", "B", "UP"]
ignore = []
[tool.ruff.format]
quote-style = "double"
indent-style = "space"
line-ending = "lf"
docstring-code-format = true
[tool.pytest.ini_options]
addopts = "-q"
testpaths = ["src"]
pythonpath = ["src"]