[project] name = "remoteterm-meshcore" version = "1.8.0" description = "RemoteTerm - Web interface for MeshCore radio mesh networks" readme = "README.md" requires-python = ">=3.10" dependencies = [ "fastapi>=0.115.0", "uvicorn[standard]>=0.32.0", "pydantic-settings>=2.0.0", "aiosqlite>=0.19.0", "pycryptodome>=3.20.0", "pynacl>=1.5.0", "meshcore", ] [project.optional-dependencies] test = [ "pytest>=8.0.0", "pytest-asyncio>=0.24.0", "httpx>=0.27.0", ] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] [tool.ruff] target-version = "py310" line-length = 100 [tool.ruff.lint] select = [ "E", # pycodestyle errors "W", # pycodestyle warnings "F", # pyflakes "I", # isort "B", # flake8-bugbear "C4", # flake8-comprehensions "UP", # pyupgrade "SIM", # flake8-simplify ] ignore = [ "E501", # line too long (handled by formatter) "SIM105", # contextlib.suppress - doesn't work well with async code "SIM108", # ternary operator (sometimes less readable) "SIM117", # nested with statements - can be clearer in tests ] [tool.ruff.lint.isort] known-first-party = ["app"] [tool.pyright] pythonVersion = "3.10" typeCheckingMode = "basic" include = ["app"] exclude = ["references", ".venv", "tests"] reportMissingImports = true reportMissingTypeStubs = false # Temporarily lenient - fix these incrementally reportOptionalMemberAccess = "warning" reportArgumentType = "warning" reportReturnType = "warning" reportAttributeAccessIssue = "warning" [dependency-groups] dev = [ "httpx>=0.28.1", "pytest>=9.0.2", "pytest-asyncio>=1.3.0", "ruff>=0.8.0", "pyright>=1.1.390", ]