[project] name = "podarium" version = "0.1.0" description = "Self-hosted podcast server and player" requires-python = ">=3.12,<3.13" dependencies = [ "fastapi>=0.115", "uvicorn[standard]>=0.32", "sqlalchemy[asyncio]>=2.0.36", "asyncpg>=0.30", "alembic>=1.14", "httpx>=0.28", "feedparser>=6.0.11", "argon2-cffi>=23.1", "pyotp>=2.9", "cryptography>=44.0", "itsdangerous>=2.2", "pydantic>=2.10", "pydantic-settings>=2.7", "prometheus-client>=0.21", "python-multipart>=0.0.20", # Web Push: VAPID signing and aes128gcm payload encryption. Only the encoding is used; # the request itself goes out through the one HTTP client like everything else. "pywebpush>=2.0", ] [project.optional-dependencies] dev = [ "pytest>=8.3", "pytest-asyncio>=0.25", "respx>=0.22", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["src/podarium"] [tool.pytest.ini_options] asyncio_mode = "auto" # One event loop for the whole run: the engine and sessionmaker are module-level and # would otherwise be bound to a loop that closed after the first test. asyncio_default_fixture_loop_scope = "session" asyncio_default_test_loop_scope = "session" testpaths = ["tests"] pythonpath = ["src", "."] [tool.ruff] line-length = 100 target-version = "py312"