[project] name = "moneyfy-backend" version = "0.1.2" description = "moneyfy – Planung monatlicher Kosten und Einkünfte" 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", "pydantic>=2.10", "pydantic-settings>=2.7", "python-dateutil>=2.9", "holidays>=0.63", "apscheduler>=3.11", "argon2-cffi>=23.1", "pyjwt>=2.10", "httpx>=0.28", "pillow>=11.0", "openpyxl>=3.1", "apprise>=1.9", "python-multipart>=0.0.20", "email-validator>=2.2", ] [project.optional-dependencies] dev = [ "pytest>=8.3", "pytest-asyncio>=0.24", "ruff>=0.8", "psycopg[binary]>=3.2", "freezegun>=1.5", ] [build-system] requires = ["setuptools>=75"] build-backend = "setuptools.build_meta" [tool.setuptools.packages.find] include = ["app*"] [tool.ruff] line-length = 100 target-version = "py312" extend-exclude = ["alembic/versions"] [tool.ruff.lint] select = ["E", "F", "I", "UP", "B", "SIM", "C4", "N", "RUF"] ignore = ["B008", "RUF001", "RUF002", "RUF003"] [tool.ruff.format] quote-style = "double" [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "session" asyncio_default_test_loop_scope = "session" filterwarnings = ["ignore::DeprecationWarning"]