[build-system] requires = ["setuptools>=68.0"] build-backend = "setuptools.build_meta" [project] name = "thoughtsync" version = "0.2.0" description = "Self-hosted personal thought-capture web app (FabledSword family)" requires-python = ">=3.12" dependencies = [ "quart>=0.19", "sqlalchemy[asyncio]>=2.0", "asyncpg>=0.29", "alembic>=1.13", "bcrypt>=4.0", "hypercorn>=0.17", ] [project.optional-dependencies] dev = [ "pytest>=8.0", "pytest-asyncio>=0.23", "ruff>=0.6", ] [tool.setuptools.packages.find] where = ["src"] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] # The unit lane runs `-m "not integration"`; the integration lane runs `-m integration` # against a real Postgres. Registered here so an unmarked typo fails loudly instead of # quietly landing a test in neither lane. markers = [ "integration: needs a live Postgres — CI's integration job, not the unit lane", ] [tool.ruff] line-length = 120 target-version = "py312" [tool.ruff.lint] select = ["E", "F"] ignore = ["E501", "E402", "F401"]