Files
NixReaperandClaude Sonnet 5 0be052bc1f
CI / lint (push) Canceled after 0s
CI / typecheck (push) Canceled after 0s
CI / unit-tests (push) Canceled after 0s
CI / integration-tests (push) Canceled after 0s
CI / container-build (push) Canceled after 0s
CI / dependency-audit (push) Canceled after 0s
Pin pytest-asyncio below 1.0
1.x changed session-scoped async fixture/event-loop behavior across test
modules, breaking the single-shared-engine assumption tests/conftest.py's
engine fixture and the asyncio_default_*_loop_scope settings depend on.
Surfaced as sporadic "relation ... does not exist" failures in specific
integration test files when run alongside the full suite, despite those
same files passing cleanly when run standalone -- confirmed via a real
Postgres run on production hardware while verifying the watch-provider
dedup fix.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
2026-09-12 04:46:08 -05:00

98 lines
3.0 KiB
TOML

[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",
"argon2-cffi>=23.1.0",
"pyjwt>=2.9.0",
"email-validator>=2.2.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.3.0",
# <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",
"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",
]
docs = [
"mkdocs>=1.6.0",
"mkdocs-material>=9.5.0",
]
[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"
# 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"
testpaths = ["tests"]