[project] name = "sdb" version = "2.0.0" description = "Backend for the SDB v2" readme = "README.md" requires-python = ">=3.12" dependencies = [ "aiosqlite==0.21.0", "apscheduler==3.11.0", "bcrypt==4.3.0", "email-validator==2.3.0", "fastapi[standard]==0.116.1", "ffmpeg-python==0.2.0", "httpx==0.28.1", "pydantic-settings==2.10.1", "pyjwt==2.10.1", "python-socketio==5.13.0", "pytz==2025.2", "python-vlc==3.0.21203", "sqlmodel==0.0.24", "uvicorn[standard]==0.35.0", "yt-dlp==2025.9.5", "asyncpg==0.30.0", "psycopg[binary]==3.2.10", ] [tool.uv] dev-dependencies = [ "coverage==7.10.6", "faker==37.6.0", "httpx==0.28.1", "mypy==1.18.1", "pytest==8.4.2", "pytest-asyncio==1.2.0", "ruff==0.13.0", ] [tool.mypy] strict = true exclude = ["venv", ".venv", "alembic"] [tool.ruff] target-version = "py312" exclude = ["alembic"] [tool.ruff.lint] select = ["ALL"] ignore = ["D100", "D103", "TRY301"] [tool.ruff.lint.per-file-ignores] "tests/**/*.py" = [ "S101", # Use of assert detected "S105", # Possible hardcoded password "S106", # Possible hardcoded password "ANN001", # Missing type annotation for function argument "ANN003", # Missing type annotation for **kwargs "ANN201", # Missing return type annotation for public function "ANN202", # Missing return type annotation for private function "ANN401", # Dynamically typed expressions (typing.Any) are disallowed "ARG001", # Unused function argument "ARG002", # Unused method argument "ARG005", # Unused lambda argument "BLE001", # Do not catch blind exception "E501", # Line too long "PLR2004", # Magic value used in comparison "PLC0415", # `import` should be at top-level "SLF001", # Private member accessed "SIM117", # Use a single `if` statement "PT011", # `pytest.raises()` is too broad "PT012", # `pytest.raises()` block should contain a single simple statement ] [tool.pytest.ini_options] asyncio_mode = "auto" filterwarnings = [ "ignore:transaction already deassociated from connection:sqlalchemy.exc.SAWarning", ]