[project] name = "metamorph-api" version = "0.1.0" description = "Metamorph backend API — collaborative purple-team platform." requires-python = ">=3.12" license = { text = "Proprietary" } dependencies = [ "flask>=3.0,<4.0", "flask-cors>=4.0,<5.0", "flask-limiter>=3.7,<4.0", "pydantic[email]>=2.6,<3.0", "pydantic-settings>=2.2,<3.0", "python-json-logger>=2.0,<3.0", "gunicorn>=21.2,<22.0", "sqlalchemy>=2.0,<3.0", "alembic>=1.13,<2.0", "psycopg[binary]>=3.1,<4.0", "argon2-cffi>=23.1,<25.0", "pyjwt>=2.8,<3.0", ] [project.optional-dependencies] dev = [ "pytest>=8.0,<9.0", "pytest-cov>=5.0,<6.0", "ruff>=0.4,<1.0", "httpx>=0.27,<1.0", ] [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["app"] [tool.ruff] line-length = 100 target-version = "py312" src = ["app", "tests"] [tool.ruff.lint] select = [ "E", # pycodestyle "F", # pyflakes "I", # isort "B", # flake8-bugbear "UP", # pyupgrade "SIM", # flake8-simplify "RUF", # ruff-specific ] ignore = ["E501"] # line length handled by formatter [tool.ruff.format] quote-style = "double" [tool.pytest.ini_options] testpaths = ["tests"] addopts = "-q --strict-markers"