[build-system] # 77 is the first setuptools that reads `license` as an SPDX expression. requires = ["setuptools>=77.0"] build-backend = "setuptools.build_meta" [project] name = "inkwell" version = "0.2.0" description = "A self-hosted web app for capturing and finding thoughts" license = "AGPL-3.0-only" requires-python = ">=3.12" dependencies = [ "quart>=0.19", "sqlalchemy[asyncio]>=2.0", "asyncpg>=0.29", "alembic>=1.13", "bcrypt>=4.0", "cryptography>=42", "hypercorn>=0.17", ] [project.optional-dependencies] dev = [ "pytest>=8.0", "pytest-asyncio>=0.23", "ruff>=0.6", ] [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.package-data] # The email logo (mail_templates.py) ships inside the package. inkwell = ["assets/*.png"] [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"]