[project]
name = "scilit-backend"
version = "0.1.0"
requires-python = ">=3.11"
dependencies = [
    "fastapi>=0.111.0",
    "uvicorn[standard]>=0.30.0",
    "sqlalchemy[asyncio]>=2.0.30",
    "asyncpg>=0.29.0",
    "alembic>=1.13.0",
    "pydantic>=2.7.0",
    "pydantic-settings>=2.3.0",
    "pyjwt>=2.8.0",
    "bcrypt>=4.0.0",
    "python-multipart>=0.0.9",
    "redis>=5.0.0",
    "arq>=0.26.0",
    "httpx>=0.27.0",
    "lxml>=5.2.0",
    "elasticsearch[async]>=8.14.0",
    "email-validator>=2.0",
    "aioboto3>=13.0.0",
    "structlog>=24.0.0",
    "sentry-sdk>=2.0.0",
]

[project.optional-dependencies]
dev = [
    "pytest>=8.0",
    "pytest-cov>=5.0.0",
    "pytest-asyncio>=0.23.0",
    "httpx>=0.27.0",
    "ruff>=0.4.0",
]

[tool.ruff]
line-length = 120
target-version = "py311"

[tool.ruff.lint]
select = ["E", "F", "W", "I", "N", "UP", "B", "SIM"]
ignore = ["E501", "E701", "E702", "B904", "SIM117", "B008", "E712", "UP017", "UP036", "UP042"]

[tool.ruff.lint.pydocstyle]
convention = "google"

[tool.ruff.lint.per-file-ignores]
"tests/*" = ["N802", "N803", "N806"]
"alembic/versions/*" = ["UP035", "UP007", "W291", "I001"]

[tool.ruff.format]
quote-style = "double"
