2026-09-04 17:34:03 -05:00
|
|
|
[project]
|
|
|
|
|
name = "aurora-core"
|
|
|
|
|
version = "0.1.0"
|
|
|
|
|
description = "Aurora Core — production-grade media metadata, discovery, and intelligence backend for the Aurora ecosystem."
|
|
|
|
|
readme = "README.md"
|
|
|
|
|
requires-python = ">=3.12"
|
|
|
|
|
license = { text = "Proprietary" }
|
|
|
|
|
authors = [{ name = "Aurora Dragon Studio" }]
|
|
|
|
|
|
|
|
|
|
dependencies = [
|
|
|
|
|
"fastapi>=0.115.0",
|
|
|
|
|
"uvicorn[standard]>=0.30.0",
|
|
|
|
|
"sqlalchemy>=2.0.35",
|
|
|
|
|
"alembic>=1.13.2",
|
|
|
|
|
"asyncpg>=0.29.0",
|
|
|
|
|
"psycopg2-binary>=2.9.9",
|
|
|
|
|
"pydantic>=2.9.0",
|
|
|
|
|
"pydantic-settings>=2.5.0",
|
|
|
|
|
"redis>=5.0.8",
|
|
|
|
|
"arq>=0.26.0",
|
|
|
|
|
"httpx>=0.27.0",
|
|
|
|
|
"structlog>=24.4.0",
|
|
|
|
|
"orjson>=3.10.0",
|
|
|
|
|
"uuid6>=2024.7.10",
|
|
|
|
|
"python-dotenv>=1.0.1",
|
|
|
|
|
"tenacity>=9.0.0",
|
|
|
|
|
"prometheus-client>=0.20.0",
|
2026-09-06 06:15:39 -05:00
|
|
|
"argon2-cffi>=23.1.0",
|
|
|
|
|
"pyjwt>=2.9.0",
|
|
|
|
|
"email-validator>=2.2.0",
|
2026-09-04 17:34:03 -05:00
|
|
|
]
|
|
|
|
|
|
|
|
|
|
[project.optional-dependencies]
|
|
|
|
|
dev = [
|
|
|
|
|
"pytest>=8.3.0",
|
2026-09-12 04:46:08 -05:00
|
|
|
# <1.0: 1.x changed session-scoped async fixture/event-loop behavior
|
|
|
|
|
# across test modules, breaking the single-shared-engine assumption
|
|
|
|
|
# tests/conftest.py:engine and the asyncio_default_*_loop_scope
|
|
|
|
|
# settings below depend on (surfaced as sporadic "relation ... does
|
|
|
|
|
# not exist" failures in specific test files when run alongside others,
|
|
|
|
|
# despite passing standalone).
|
|
|
|
|
"pytest-asyncio>=0.24.0,<1.0.0",
|
2026-09-04 17:34:03 -05:00
|
|
|
"pytest-cov>=5.0.0",
|
|
|
|
|
"ruff>=0.6.9",
|
|
|
|
|
"mypy>=1.11.2",
|
|
|
|
|
"aiosqlite>=0.20.0",
|
|
|
|
|
"faker>=28.4.1",
|
|
|
|
|
"types-redis",
|
|
|
|
|
]
|
|
|
|
|
load = [
|
|
|
|
|
"locust>=2.31.0",
|
|
|
|
|
]
|
2026-09-06 06:04:59 -05:00
|
|
|
docs = [
|
|
|
|
|
"mkdocs>=1.6.0",
|
|
|
|
|
"mkdocs-material>=9.5.0",
|
|
|
|
|
]
|
2026-09-04 17:34:03 -05:00
|
|
|
|
|
|
|
|
[build-system]
|
|
|
|
|
requires = ["setuptools>=68"]
|
|
|
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
|
|
|
|
|
|
[tool.setuptools.packages.find]
|
|
|
|
|
include = ["app*"]
|
|
|
|
|
|
|
|
|
|
[tool.ruff]
|
|
|
|
|
line-length = 100
|
|
|
|
|
target-version = "py312"
|
|
|
|
|
exclude = ["migrations"]
|
|
|
|
|
|
|
|
|
|
[tool.ruff.lint]
|
|
|
|
|
select = ["E", "F", "I", "UP", "B", "SIM", "N"]
|
|
|
|
|
# E501: line length handled by formatter, not worth failing CI over.
|
|
|
|
|
# B027: MetadataProvider.aclose() is an intentional optional-override hook
|
|
|
|
|
# (concrete no-op default), not an accidentally-unimplemented abstract method.
|
|
|
|
|
# B008: FastAPI's `Depends(...)` dependency-injection idiom is a call in an
|
|
|
|
|
# argument default by design; this is the standard FastAPI pattern.
|
|
|
|
|
ignore = ["E501", "B027", "B008"]
|
|
|
|
|
|
|
|
|
|
[tool.mypy]
|
|
|
|
|
python_version = "3.12"
|
|
|
|
|
plugins = ["pydantic.mypy"]
|
|
|
|
|
ignore_missing_imports = true
|
|
|
|
|
disallow_untyped_defs = false
|
|
|
|
|
exclude = ["migrations", "tests"]
|
|
|
|
|
|
|
|
|
|
[tool.pytest.ini_options]
|
|
|
|
|
asyncio_mode = "auto"
|
2026-09-04 19:23:18 -05:00
|
|
|
# The integration test suite shares one session-scoped asyncpg engine
|
|
|
|
|
# (tests/conftest.py:engine) across every test, for speed — schema is
|
|
|
|
|
# created once instead of per test. asyncpg connections are bound to the
|
|
|
|
|
# event loop they were created in, so every fixture/test must run on that
|
|
|
|
|
# same loop; pytest-asyncio's default is a fresh loop per test, which
|
|
|
|
|
# breaks that assumption ("another operation is in progress" / "attached
|
|
|
|
|
# to a different loop"). Pinning both to "session" fixes it.
|
|
|
|
|
asyncio_default_fixture_loop_scope = "session"
|
|
|
|
|
asyncio_default_test_loop_scope = "session"
|
2026-09-04 17:34:03 -05:00
|
|
|
testpaths = ["tests"]
|