2026-02-02 20:15:38 +05:30
|
|
|
[tool.black]
|
|
|
|
|
line-length = 100
|
|
|
|
|
target-version = ["py312"]
|
2026-02-09 00:51:26 +05:30
|
|
|
extend-exclude = '(\.venv|migrations/versions)'
|
2026-02-02 20:15:38 +05:30
|
|
|
|
|
|
|
|
[tool.isort]
|
|
|
|
|
profile = "black"
|
|
|
|
|
line_length = 100
|
2026-02-09 00:51:26 +05:30
|
|
|
skip = [".venv", "migrations/versions"]
|
2026-02-04 02:28:51 +05:30
|
|
|
[project]
|
|
|
|
|
name = "openclaw-agency-backend"
|
|
|
|
|
version = "0.1.0"
|
|
|
|
|
requires-python = ">=3.12"
|
|
|
|
|
dependencies = [
|
2026-02-10 16:05:49 +05:30
|
|
|
"alembic==1.18.3",
|
|
|
|
|
"clerk-backend-api==4.2.0",
|
|
|
|
|
"fastapi==0.128.6",
|
|
|
|
|
"fastapi-pagination==0.15.10",
|
|
|
|
|
"jinja2==3.1.6",
|
|
|
|
|
"psycopg[binary]==3.3.2",
|
|
|
|
|
"pydantic-settings==2.12.0",
|
|
|
|
|
"python-dotenv==1.2.1",
|
|
|
|
|
"sqlalchemy[asyncio]==2.0.46",
|
|
|
|
|
"sqlmodel==0.0.32",
|
|
|
|
|
"sse-starlette==3.2.0",
|
|
|
|
|
"uvicorn[standard]==0.40.0",
|
|
|
|
|
"websockets==16.0",
|
2026-02-04 02:28:51 +05:30
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[project.optional-dependencies]
|
|
|
|
|
dev = [
|
2026-02-10 16:05:49 +05:30
|
|
|
"aiosqlite==0.22.1",
|
|
|
|
|
"black==26.1.0",
|
|
|
|
|
"coverage[toml]==7.13.4",
|
|
|
|
|
"flake8==7.3.0",
|
|
|
|
|
"httpx==0.28.1",
|
|
|
|
|
"isort==7.0.0",
|
|
|
|
|
"mypy==1.19.1",
|
|
|
|
|
"pytest==9.0.2",
|
|
|
|
|
"pytest-asyncio==1.3.0",
|
|
|
|
|
"pytest-cov==7.0.0",
|
|
|
|
|
"ruff==0.15.0",
|
2026-02-04 02:28:51 +05:30
|
|
|
]
|
2026-02-04 03:57:19 +05:30
|
|
|
|
|
|
|
|
[tool.mypy]
|
|
|
|
|
python_version = "3.12"
|
2026-02-06 16:12:04 +05:30
|
|
|
strict = true
|
2026-02-04 03:57:19 +05:30
|
|
|
plugins = ["pydantic.mypy"]
|
2026-02-06 16:12:04 +05:30
|
|
|
files = ["app", "scripts"]
|
|
|
|
|
mypy_path = ["typings"]
|
|
|
|
|
show_error_codes = true
|
2026-02-06 11:57:29 +05:30
|
|
|
|
2026-02-09 17:47:06 +05:30
|
|
|
[[tool.mypy.overrides]]
|
|
|
|
|
module = ["tests.*"]
|
|
|
|
|
ignore_errors = true
|
|
|
|
|
|
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
|
|
|
"tests/**/*.py" = ["ALL"]
|
|
|
|
|
|
2026-02-06 11:57:29 +05:30
|
|
|
[tool.pytest.ini_options]
|
|
|
|
|
asyncio_default_fixture_loop_scope = "function"
|
2026-02-07 09:37:08 +00:00
|
|
|
|
|
|
|
|
[tool.coverage.run]
|
|
|
|
|
branch = true
|
|
|
|
|
source = ["app"]
|
|
|
|
|
# Migrations are generated artifacts; testing them doesn't add coverage signal.
|
2026-02-09 00:51:26 +05:30
|
|
|
omit = ["migrations/versions/*"]
|
2026-02-07 09:37:08 +00:00
|
|
|
|
|
|
|
|
[tool.coverage.report]
|
|
|
|
|
show_missing = true
|
|
|
|
|
skip_covered = true
|
|
|
|
|
# NOTE: Current baseline coverage is low; we publish coverage.xml in CI but
|
|
|
|
|
# don't fail the build until the test suite expands. Tighten toward 100% in
|
|
|
|
|
# follow-up PRs as coverage grows.
|
|
|
|
|
fail_under = 0
|