diff --git a/.devcontainer.json b/.devcontainer.json index 4224653..b2d7e82 100644 --- a/.devcontainer.json +++ b/.devcontainer.json @@ -38,6 +38,7 @@ }, "remoteUser": "vscode", "features": { + "ghcr.io/va-h/devcontainers-features/uv:1": {}, "ghcr.io/devcontainers-extra/features/apt-packages:1": { "packages": [ "ffmpeg", diff --git a/pyproject.toml b/pyproject.toml index bbedfef..00f11dd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,18 +3,21 @@ name = "panda_status" version = "1.2.0" requires-python = ">=3.13.2" dependencies = [ - "colorlog>=6.9.0", - "hassil>=3.2.0", + "colorlog", + "ffmpeg", + "ha-ffmpeg", + "hassil", "home-assistant-intents==2025.9.3", "homeassistant==2025.8.1", - "mutagen>=1.47.0", - "numpy>=2.3.2", + "mutagen", + "numpy", "pip>=25.2", + "pip>=25.2", + "pymicro-vad", + "pyspeex-noise", + "PyTurboJPEG", "ruff>=0.12.12", - "websockets>=15.0.1", -] - -[dependency-groups] -dev = [ - "ruff>=0.12.12" + "ruff>=0.12.12", + "websockets", + "websockets", ] diff --git a/scripts/develop b/scripts/develop index 5149025..8dece28 100755 --- a/scripts/develop +++ b/scripts/develop @@ -4,17 +4,21 @@ set -e cd "$(dirname "$0")/.." +echo "๐Ÿผ [develop] Starting Home Assistant development environment in $(pwd)" + # Create config dir if not present if [[ ! -d "${PWD}/config" ]]; then + echo "๐Ÿ“ [develop] Creating config directory..." mkdir -p "${PWD}/config" - hass --config "${PWD}/config" --script ensure_config + echo "โš™๏ธ [develop] Ensuring Home Assistant config..." + uv run hass --config "${PWD}/config" --script ensure_config + echo "โœ… [develop] Config directory ready." fi # Set the path to custom_components -## This let's us have the structure we want /custom_components/panda_status -## while at the same time have Home Assistant configuration inside /config -## without resulting to symlinks. +echo "๐Ÿ”ง [develop] Setting PYTHONPATH for custom_components..." export PYTHONPATH="${PYTHONPATH}:${PWD}/custom_components" # Start Home Assistant -hass --config "${PWD}/config" --debug +echo "๐Ÿš€ [develop] Starting Home Assistant with debug mode..." +uv run hass --config "${PWD}/config" --debug diff --git a/scripts/lint b/scripts/lint index 5d68d15..5dfba7e 100755 --- a/scripts/lint +++ b/scripts/lint @@ -4,5 +4,15 @@ set -e cd "$(dirname "$0")/.." -ruff format . -ruff check . --fix +echo "๐Ÿผ [lint] Starting linting in $(pwd)" + +# Run ruff format and check +echo "๐Ÿงน [lint] Running ruff format..." +uv run ruff format . +echo "โœ… [lint] Formatting complete." + +echo "๐Ÿ”Ž [lint] Running ruff check with --fix..." +uv run ruff check . --fix +echo "โœ… [lint] Linting complete." + +echo "๐ŸŽ‰ [lint] Linting finished." diff --git a/scripts/setup b/scripts/setup index 4876963..1a940e6 100755 --- a/scripts/setup +++ b/scripts/setup @@ -4,4 +4,29 @@ set -e cd "$(dirname "$0")/.." -uv venv && uv pip install -r pyproject.toml +echo "๐Ÿผ [setup] Starting setup in $(pwd)" + +# Download UV if not present +if ! command -v uv >/dev/null 2>&1; then + echo "๐Ÿ” [setup] 'uv' not found. Installing UV..." + curl -LsSf https://astral.sh/uv/install.sh | sh + echo "โœ… [setup] UV installed." +else + echo "โœ… [setup] 'uv' is already installed." +fi + +# Create venv if not present +if [[ ! -d "${PWD}/.venv" ]]; then + echo "๐Ÿ”ง [setup] Creating Python virtual environment (.venv)..." + uv venv + echo "โœ… [setup] Virtual environment created." +else + echo "โœ… [setup] Virtual environment already exists." +fi + +# Install dependencies +echo "๐Ÿ“ฆ [setup] Installing dependencies with uv..." +uv sync --dev --frozen --link-mode=copy +echo "โœ… [setup] Dependencies installed." + +echo "๐ŸŽ‰ [setup] Setup complete." diff --git a/uv.lock b/uv.lock index 39450f1..5994931 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.13.2" [[package]] @@ -743,6 +743,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, ] +[[package]] +name = "ha-ffmpeg" +version = "3.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "async-timeout" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1e/3b/bd1284a9bc39cc119b0da551a81be6cf30dc3cfb369ce8c62fb648d7a2ea/ha_ffmpeg-3.2.2.tar.gz", hash = "sha256:80e4a77b3eda73df456ec9cc3295a898ed7cbb8cd2d59798f10e8c10a8e6c401", size = 7608, upload-time = "2024-11-08T13:32:14.181Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/66/7863e5a3713bb71c02f050f14a751b02e7a2d50eaf2109c96a1202e65d8b/ha_ffmpeg-3.2.2-py3-none-any.whl", hash = "sha256:4fd4a4f4cdaf3243d2737942f3f41f141e4437d2af1167655815dc03283b1652", size = 8749, upload-time = "2024-11-08T13:32:12.69Z" }, +] + [[package]] name = "habluetooth" version = "5.3.0" @@ -840,11 +852,11 @@ wheels = [ [[package]] name = "home-assistant-intents" -version = "2025.8.29" +version = "2025.9.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/04/cb/cece4dd57794e750735bd2bce7a37686221a3dca8cdb04db69c8c4fe29b7/home_assistant_intents-2025.8.29.tar.gz", hash = "sha256:800453450d23d1e18fef19098d66f9ed671b87f6c7eae5b3fda0d8ab84243ee2", size = 2764303, upload-time = "2025-08-29T20:28:47.941Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/61/eb71ff8fd24ae422a6e1f563e62aad668b1bbf1e1840193333ae7393f413/home_assistant_intents-2025.9.3.tar.gz", hash = "sha256:20a562bb88e94d5c443e37f6087c2f46a68f00d4e4a3ff06bfb58dd7f82f1b8a", size = 2781766, upload-time = "2025-09-03T14:04:05.744Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/44/1e1175e1284bf5cb9f9b3e0ca11b8a8d89df9ac79394284e43e5de41a2b8/home_assistant_intents-2025.8.29-py3-none-any.whl", hash = "sha256:29bf734dd4b70fc55e0cdd8eed12b720157acc0e6d2802550c37f4cb9628222c", size = 2792193, upload-time = "2025-08-29T20:28:46.342Z" }, + { url = "https://files.pythonhosted.org/packages/31/9e/8dafd87640ce0733ec01f32a4603b4e3464ad3600a166c5dd24d7fc5495b/home_assistant_intents-2025.9.3-py3-none-any.whl", hash = "sha256:d0e56008a002a0e70f67185c290b687a0128e7b76bfcfea8abc19bdec94721b4", size = 2810304, upload-time = "2025-09-03T14:04:04.027Z" }, ] [[package]] @@ -1189,6 +1201,7 @@ source = { virtual = "." } dependencies = [ { name = "colorlog" }, { name = "ffmpeg" }, + { name = "ha-ffmpeg" }, { name = "hassil" }, { name = "home-assistant-intents" }, { name = "homeassistant" }, @@ -1202,31 +1215,24 @@ dependencies = [ { name = "websockets" }, ] -[package.dev-dependencies] -dev = [ - { name = "ruff" }, -] - [package.metadata] requires-dist = [ - { name = "colorlog", specifier = ">=6.9.0" }, - { name = "ffmpeg", specifier = ">=1.4" }, - { name = "hassil", specifier = ">=3.2.0" }, - { name = "home-assistant-intents", specifier = "==2025.8.29" }, + { name = "colorlog" }, + { name = "ffmpeg" }, + { name = "ha-ffmpeg" }, + { name = "hassil" }, + { name = "home-assistant-intents", specifier = "==2025.9.3" }, { name = "homeassistant", specifier = "==2025.8.1" }, - { name = "mutagen", specifier = ">=1.47.0" }, - { name = "numpy", specifier = ">=2.3.2" }, + { name = "mutagen" }, + { name = "numpy" }, { name = "pip", specifier = ">=25.2" }, - { name = "pymicro-vad", specifier = ">=1.0.2" }, - { name = "pyspeex-noise", specifier = ">=1.0.2" }, - { name = "pyturbojpeg", specifier = ">=1.8.2" }, + { name = "pymicro-vad" }, + { name = "pyspeex-noise" }, + { name = "pyturbojpeg" }, { name = "ruff", specifier = ">=0.12.12" }, - { name = "websockets", specifier = ">=15.0.1" }, + { name = "websockets" }, ] -[package.metadata.requires-dev] -dev = [{ name = "ruff", specifier = ">=0.12.12" }] - [[package]] name = "pillow" version = "11.3.0"