[build-system] requires = ["setuptools>=69.0"] build-backend = "setuptools.build_meta" [project] name = "tuxdmx" version = "1.0.0" description = "Headless browser-based DMX controller with simulator-first architecture." readme = "README.md" requires-python = ">=3.11" authors = [{ name = "Thomas / TuxiNet" }] dependencies = [ "alembic==1.14.0", "greenlet==3.1.1", "argon2-cffi==23.1.0", "fastapi==0.115.6", "httpx==0.28.1", "pydantic==2.10.4", "pydantic-settings==2.7.0", "python-multipart==0.0.20", "psutil==6.1.1", "sqlalchemy==2.0.36", "aiosqlite==0.20.0", "uvicorn[standard]==0.34.0", ] [project.optional-dependencies] dev = [ "mypy==1.14.1", "pytest==8.3.4", "pytest-asyncio==0.25.2", "pytest-cov==6.0.0", "ruff==0.8.6", ] [tool.setuptools] package-dir = { "" = "backend" } [tool.setuptools.packages.find] where = ["backend"] [tool.pytest.ini_options] testpaths = ["backend/tests"] asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "I", "N", "UP", "B", "A", "C4"] [tool.mypy] python_version = "3.11" packages = ["app"] warn_unused_configs = true warn_redundant_casts = true warn_unused_ignores = true strict_optional = true disallow_untyped_defs = true no_implicit_optional = true ignore_missing_imports = true