[tool.poetry]
name = "endurain"
version = "0.16.0"
description = "Endurain API for the Endurain app"
authors = ["João Vitória Silva <8648976+joaovitoriasilva@users.noreply.github.com>"]
readme = "README.md"
package-mode = false

[tool.poetry.dependencies]
python = "^3.12"
fastapi = "^0.115.6"
uvicorn = "^0.34.0"
python-dotenv = "^1.0.1"
sqlalchemy = "^2.0.36"
apscheduler = "^3.11.0"
requests = "^2.32.3"
stravalib = "^2.1"
opentelemetry-sdk = "^1.25.0"
opentelemetry-instrumentation-fastapi = "^0.49b0"
opentelemetry-exporter-otlp = "^1.25.0"
python-multipart = "^0.0.20"
gpxpy = "^1.6.2"
tcxreader = "^0.4.11"
alembic = "^1.14.0"
joserfc = "^1.0.1"
fitdecode = "^0.10.0"
numpy = "^2.2.1"
geopy = "^2.4.1"
flexparser = "^0.4"
pydantic-core = "^2.27.2"
importlib-metadata = "^8.5.0"
garminconnect = "^0.2.25"
websockets = "^14.1"
timezonefinder = "^6.5.7"
psycopg = {extras = ["binary", "pool"], version = "^3.2.3"}
poetry = "^2.0.0"
user-agents = "^2.2.0"
pydantic = {extras = ["email"], version = "^2.11.3"}
garth = "^0.5.16"
apprise = "^1.8.0"
pyotp = "^2.9.0"
qrcode = {extras = ["pil"], version = "^8.2"}
pwdlib = {extras = ["argon2", "bcrypt"], version = "^0.2.1"}
authlib = "^1.3.2"
httpx = "^0.28.1"

[tool.poetry.group.dev.dependencies]
pytest = "^8.3.4"
pytest-asyncio = "^0.24.0"
pytest-cov = "^6.0.0"
httpx = "^0.28.1"
faker = "^33.1.0"

[tool.pytest.ini_options]
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
addopts = "-v --strict-markers --cov=app --cov-report=term-missing --cov-report=html"

[tool.coverage.run]
source = ["app"]
omit = ["*/tests/*", "*/__pycache__/*", "*/alembic/*"]

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

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
