[build-system] requires = ["setuptools>=68", "wheel"] build-backend = "setuptools.build_meta" [project] name = "vocero-api" version = "0.1.0" description = "FastAPI integration and realtime proxy for the Vocero frontend" readme = "README.md" requires-python = ">=3.12,<3.13" dependencies = [ "fastapi==0.115.6", "uvicorn[standard]==0.34.0", "httpx==0.28.1", "python-dotenv==1.2.2", "pydantic==2.13.5", "websockets==17.2", "mcp==1.29.0", "jsonschema==4.26.0", ] [dependency-groups] dev = [ "mypy>=1.16,<2", "pre-commit>=4.4,<5", "pytest>=9,<10", "ruff>=0.12,<1", "types-jsonschema>=4.26.0.20261006", ] [tool.uv] required-version = "==0.12.5" [tool.setuptools.packages.find] include = ["vocero_api*"] [tool.ruff] target-version = "py312" line-length = 120 include = ["pyproject.toml", "vocero_api/**/*.py", "server.py", "tests/**/*.py", "scripts/**/*.py"] [tool.ruff.lint] select = ["E4", "E7", "E9", "F", "I", "B", "UP"] ignore = ["UP040", "UP046"] [tool.ruff.format] quote-style = "double" indent-style = "space" line-ending = "auto" [tool.mypy] python_version = "3.12" plugins = ["pydantic.mypy"] files = ["vocero_api", "server.py"] check_untyped_defs = true disallow_untyped_defs = true no_implicit_optional = true strict_equality = true warn_redundant_casts = true warn_return_any = true warn_unused_configs = true warn_unused_ignores = true show_error_codes = true pretty = true [tool.pydantic-mypy] init_typed = true warn_untyped_fields = true [tool.pytest.ini_options] testpaths = ["tests"] pythonpath = ["."] # Starlette 0.41.3 uses an alias deprecated by AnyIO 4.15. Keep the runtime # versions used for compatibility captures; remove this test-only exception # when upgrading Starlette. Upstream: https://github.com/Kludex/starlette/issues/3497 filterwarnings = [ 'ignore:^The anyio\.abc\.BlockingPortal alias is deprecated, use anyio\.from_thread\.BlockingPortal instead\.$:DeprecationWarning:^starlette\.testclient$', ]