[project] name = "remoteterm-meshcore" version = "3.4.1" 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", "httpx>=0.28.1", "pycryptodome>=3.20.0", "pynacl>=1.5.0", "meshcore==2.2.29", "aiomqtt>=2.0", "apprise>=1.9.7", "boto3>=1.38.0", ] [project.optional-dependencies] test = [ "pytest>=8.0.0", "pytest-asyncio>=0.24.0", "pytest-xdist>=3.0", "httpx>=0.27.0", ] [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] addopts = "-n auto --dist worksteal" [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 [dependency-groups] dev = [ "httpx>=0.28.1", "pip-licenses>=5.0.0", "pytest>=9.0.2", "pytest-asyncio>=1.3.0", "pytest-xdist>=3.0", "ruff>=0.8.0", "pyright>=1.1.390", ]