Files
shelly-ui/pyproject.toml
T
jonas 71803418e5 Initial commit: Shelly Manager with Textual CLI, Streamlit UI, and comprehensive .gitignore
Shelly device management app with mDNS/subnet discovery, inventory,
configuration, and mass operations for Gen1/Gen2+ devices.

Includes .gitignore excluding runtime data (device DB, user config),
AI conversation history, build artifacts, and common Python/OS patterns.
2026-03-23 21:51:59 +01:00

65 lines
1.6 KiB
TOML

[project]
name = "shelly-manager"
version = "0.1.0"
description = "Shelly device management: shared core, Textual CLI, Streamlit UI"
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
"aioshelly>=13.0.0",
"aiohttp>=3.9.0",
"aiosqlite>=0.20.0",
"pydantic>=2.5.0",
"zeroconf>=0.132.0",
"textual>=0.86.0",
"rich>=13.7.0",
"streamlit>=1.40.0",
"typer>=0.12.0",
"pyyaml>=6.0.0",
"watchdog>=6.0.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.0.0",
"pytest-asyncio>=0.24.0",
"ruff>=0.8.0",
]
[project.scripts]
shelly-manager = "shelly_manager.cli.app:app_cli"
shelly-manager-ui = "shelly_manager.ui.entry:main"
[build-system]
requires = ["setuptools>=61", "wheel"]
build-backend = "setuptools.build_meta"
[tool.setuptools.packages.find]
where = ["src"]
[tool.ruff]
line-length = 100
target-version = "py311"
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
markers = [
"integration: real LAN / Shelly devices (enable with SHELLY_INTEGRATION=1)",
]
# Streamlit AppTest + asyncio.run in page scripts leave sockets/event loops that GC
# clears after tests; pytest's unraisableexception plugin then raises ExceptionGroup and
# exit code 1 even when all tests passed. Disable that plugin for this project.
addopts = "-p no:unraisableexception"
# Also quiet ResourceWarning text on stderr for the same teardown noise.
filterwarnings = [
"ignore:unclosed event loop:ResourceWarning",
"ignore:unclosed <socket:ResourceWarning",
]
[dependency-groups]
dev = [
"pytest>=9.0.2",
"pytest-asyncio>=1.3.0",
]