home-assistant: 2026.6.4 -> 2026.7.1 (#538525)

This commit is contained in:
Vladimír Čunát
2026-07-05 07:02:29 +00:00
committed by GitHub
112 changed files with 860 additions and 888 deletions
@@ -0,0 +1,61 @@
diff --git a/spraycharles/lib/analyze.py b/spraycharles/lib/analyze.py
index 537f6db..424f87e 100755
--- a/spraycharles/lib/analyze.py
+++ b/spraycharles/lib/analyze.py
@@ -4,7 +4,7 @@ from enum import Enum
from rich.table import Table
from spraycharles.lib.logger import console, logger
-from spraycharles.lib.utils import discord, slack, teams, SMBStatus, SprayResult, HookSvc
+from spraycharles.lib.utils import discord, slack, SMBStatus, SprayResult, HookSvc
class Analyzer:
@@ -210,8 +210,6 @@ class Analyzer:
pass
case HookSvc.SLACK:
slack(self.webhook, self.host)
- case HookSvc.TEAMS:
- teams(self.webhook, self.host)
case HookSvc.DISCORD:
discord(self.webhook, self.host)
case _:
diff --git a/spraycharles/lib/utils/__init__.py b/spraycharles/lib/utils/__init__.py
index 59eda99..3615e4c 100644
--- a/spraycharles/lib/utils/__init__.py
+++ b/spraycharles/lib/utils/__init__.py
@@ -1,4 +1,4 @@
-from spraycharles.lib.utils.notify import discord, teams, slack, HookSvc
+from spraycharles.lib.utils.notify import discord, slack, HookSvc
from spraycharles.lib.utils.ntlm_challenger import main as ntlm_challenger
from spraycharles.lib.utils.smbstatus import SMBStatus
from spraycharles.lib.utils.sprayresult import SprayResult
diff --git a/spraycharles/lib/utils/notify.py b/spraycharles/lib/utils/notify.py
index f39d10d..f0d62f9 100644
--- a/spraycharles/lib/utils/notify.py
+++ b/spraycharles/lib/utils/notify.py
@@ -1,12 +1,10 @@
from enum import Enum
-import pymsteams
from discord_webhook import DiscordWebhook
import requests
class HookSvc(str, Enum):
SLACK = "Slack"
- TEAMS = "Teams"
DISCORD = "Discord"
@@ -18,12 +16,6 @@ def slack(webhook, host):
response.raise_for_status() # Raises an error for bad responses
-def teams(webhook, host):
- notify = pymsteams.connectorcard(webhook)
- notify.text(f"Credentials guessed for host: {host}")
- notify.send()
-
-
def discord(webhook, host):
notify = DiscordWebhook(
+4 -1
View File
@@ -18,13 +18,16 @@ python3.pkgs.buildPythonApplication (finalAttrs: {
pythonRelaxDeps = true;
# https://github.com/Tw1sm/spraycharles/pull/34
pythonRemoveDeps = [ "pymsteams" ];
patches = [ ./drop-teams.patch ];
build-system = with python3.pkgs; [ poetry-core ];
dependencies = with python3.pkgs; [
discord-webhook
impacket
numpy
pymsteams
pyyaml
requests
requests-ntlm
@@ -6,6 +6,7 @@
fetchFromGitHub,
mashumaro,
orjson,
pyprojectVersionPatchHook,
pytest-aiohttp,
pytest-cov-stub,
pytest-timeout,
@@ -16,23 +17,25 @@
buildPythonPackage rec {
pname = "aiohasupervisor";
version = "0.4.3";
version = "0.5.0";
pyproject = true;
src = fetchFromGitHub {
owner = "home-assistant-libs";
repo = "python-supervisor-client";
tag = version;
hash = "sha256-h22y62f+pdoHYKqPeKNGFkVS7/IMWbxaAoDLomwAB40=";
hash = "sha256-qIj3kiKSo0aUj7b250c39FqxU3jV6uegmBlxR6wOkQ8=";
};
postPatch = ''
substituteInPlace pyproject.toml \
--replace-fail 'version = "0.0.0"' 'version = "${version}"' \
--replace-fail "setuptools>=68.0,<82.1" "setuptools" \
--replace-fail ', "wheel>=0.40,<0.47"' ""
--replace-fail "setuptools>=68.0,<82.1" "setuptools"
'';
nativeBuildInputs = [
pyprojectVersionPatchHook
];
build-system = [ setuptools ];
dependencies = [
@@ -19,14 +19,14 @@
buildPythonPackage (finalAttrs: {
pname = "aiohomeconnect";
version = "0.36.1";
version = "0.38.0";
pyproject = true;
src = fetchFromGitHub {
owner = "MartinHjelmare";
repo = "aiohomeconnect";
tag = "v${finalAttrs.version}";
hash = "sha256-dzDNwqAYS1Sqhcd9koNTtSkXZ/t78WC/YIKOaA4uqzI=";
hash = "sha256-KJlkJXxbTSA1j/lvCAsIEheF5h2HQpJXVmiM3dyINPw=";
};
build-system = [ setuptools ];
@@ -13,7 +13,7 @@
buildPythonPackage (finalAttrs: {
pname = "aiolifx-themes";
version = "1.0.3";
version = "1.0.4";
pyproject = true;
disabled = pythonOlder "3.12";
@@ -22,7 +22,7 @@ buildPythonPackage (finalAttrs: {
owner = "Djelibeybi";
repo = "aiolifx-themes";
tag = "v${finalAttrs.version}";
hash = "sha256-Y92ze+zrkz+fxQNFFSR5V9sPJMN0/dfIRwT6UhXo0+U=";
hash = "sha256-FTQu8dvm3myRsMC2SKlvIk0MkRIuDPVv5Zxnw5IrPv4=";
};
build-system = [ poetry-core ];
@@ -12,14 +12,14 @@
buildPythonPackage rec {
pname = "aiolifx";
version = "1.2.1";
version = "1.2.2";
pyproject = true;
src = fetchFromGitHub {
owner = "aiolifx";
repo = "aiolifx";
tag = version;
hash = "sha256-9FTsY/VFfzLlDEjF8ueBQxr30YasdQwei1/KfHiXwMo=";
hash = "sha256-v2001UY12HTi1pgugfRQSUg1R6uZAfVpwCASZZW9S0o=";
};
build-system = [ setuptools ];
@@ -15,7 +15,7 @@
buildPythonPackage (finalAttrs: {
pname = "aiopnsense";
version = "1.0.8";
version = "1.1.0";
pyproject = true;
disabled = pythonOlder "3.14";
@@ -24,7 +24,7 @@ buildPythonPackage (finalAttrs: {
owner = "Snuffy2";
repo = "aiopnsense";
tag = "v${finalAttrs.version}";
hash = "sha256-pJVYbf81/vZRi5elhNhiscXrEqDRLiIrik8N9GcR6yQ=";
hash = "sha256-Ffp0CTYqqeeB8462luTvpa2dp2QOxztkipretBqaKig=";
};
build-system = [ setuptools ];
@@ -17,14 +17,14 @@
buildPythonPackage (finalAttrs: {
pname = "aioshelly";
version = "13.26.1";
version = "13.26.2";
pyproject = true;
src = fetchFromGitHub {
owner = "home-assistant-libs";
repo = "aioshelly";
tag = finalAttrs.version;
hash = "sha256-mOqHHgyx1Eevhr8BHkfFQa7g6x7vt9KJe4E72fr9HPg=";
hash = "sha256-LNMFFi3afbDFezr32zr85lNX1TIdo8BF04yDfc2AIA0=";
};
build-system = [ setuptools ];
@@ -1,39 +0,0 @@
{
lib,
aiohttp,
async-timeout,
buildPythonPackage,
fetchPypi,
setuptools,
}:
buildPythonPackage (finalAttrs: {
pname = "asmog";
version = "0.0.6";
pyproject = true;
src = fetchPypi {
inherit (finalAttrs) pname version;
hash = "sha256-k8dC3g2oY/b4w4m7Y/HUy/6/3Tm1kntx9tjoyXqDaJE=";
};
build-system = [ setuptools ];
dependencies = [
aiohttp
async-timeout
];
# Project doesn't ship the tests
# https://github.com/kstaniek/python-ampio-smog-api/issues/2
doCheck = false;
pythonImportsCheck = [ "asmog" ];
meta = {
description = "Python module for Ampio Smog Sensors";
homepage = "https://github.com/kstaniek/python-ampio-smog-api";
license = with lib.licenses; [ asl20 ];
maintainers = with lib.maintainers; [ fab ];
};
})
@@ -1,41 +0,0 @@
{
lib,
buildPythonPackage,
fetchPypi,
async-timeout,
pysnmp,
poetry-core,
}:
buildPythonPackage rec {
pname = "atenpdu";
version = "0.7.2";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-+UQVCizqpyVe7nuQUYwSBOtiTwW+0LVH1HaaucnIg9k=";
};
build-system = [ poetry-core ];
dependencies = [
async-timeout
pysnmp
];
# Module has no test
doCheck = false;
pythonImportsCheck = [ "atenpdu" ];
meta = {
description = "Python interface to control ATEN PE PDUs";
homepage = "https://github.com/mtdcr/pductl";
changelog = "https://github.com/mtdcr/pductl/releases/tag/${version}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ fab ];
mainProgram = "pductl";
broken = lib.versionAtLeast pysnmp.version "7";
};
}
@@ -1,49 +0,0 @@
{
lib,
bluepy,
buildPythonPackage,
csrmesh,
fetchPypi,
pycryptodome,
requests,
setuptools,
}:
buildPythonPackage (finalAttrs: {
pname = "avion";
version = "0.10";
pyproject = true;
src = fetchPypi {
inherit (finalAttrs) pname version;
hash = "sha256-v/0NwFmxDZ9kEOx5qs5L9sKzOg/kto79syctg0Ah+30=";
};
postPatch = ''
# https://github.com/mjg59/python-avion/pull/16
substituteInPlace setup.py \
--replace "bluepy>==1.1.4" "bluepy>=1.1.4"
'';
build-system = [ setuptools ];
dependencies = [
bluepy
csrmesh
pycryptodome
requests
];
# Module has no test
doCheck = false;
# bluepy/uuids.json is not found
# pythonImportsCheck = [ "avion" ];
meta = {
description = "Python API for controlling Avi-on Bluetooth dimmers";
homepage = "https://github.com/mjg59/python-avion";
license = with lib.licenses; [ gpl3Plus ];
maintainers = with lib.maintainers; [ fab ];
};
})
@@ -1,40 +0,0 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
setuptools,
btlewrap,
bluepy,
}:
buildPythonPackage rec {
pname = "beewi-smartclim";
version = "0.0.10";
pyproject = true;
src = fetchFromGitHub {
owner = "alemuro";
repo = "beewi_smartclim";
tag = version;
hash = "sha256-xdr545Q4DFhup2BCMZZ1WYWgt97qT6oipIHWcsp90+A=";
};
build-system = [ setuptools ];
dependencies = [
btlewrap
bluepy
];
# No tests available
doCheck = false;
pythonImportsCheck = [ "beewi_smartclim" ];
meta = {
description = "Library to read data from BeeWi SmartClim sensor using Bluetooth LE";
homepage = "https://github.com/alemuro/beewi_smartclim";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.jamiemagee ];
};
}
@@ -21,14 +21,14 @@
buildPythonPackage (finalAttrs: {
pname = "bluetooth-adapters";
version = "2.3.0";
version = "2.4.0";
pyproject = true;
src = fetchFromGitHub {
owner = "Bluetooth-Devices";
repo = "bluetooth-adapters";
tag = "v${finalAttrs.version}";
hash = "sha256-r/qDwlIVa7VBkhepmuFqwtlJ7WYUTiYRKikhURTgLH8=";
hash = "sha256-d1vHb1WvsumlvilwuV6yfTwMXViLqeosSSM3LijIGYY=";
};
outputs = [
@@ -15,14 +15,14 @@
buildPythonPackage (finalAttrs: {
pname = "dbus-fast";
version = "5.0.17";
version = "5.0.22";
pyproject = true;
src = fetchFromGitHub {
owner = "Bluetooth-Devices";
repo = "dbus-fast";
tag = "v${finalAttrs.version}";
hash = "sha256-wZ4ufGua56weOuaOkyjBIzDex/gjmLeAczYzeLQRFwo=";
hash = "sha256-tYgsaXOo1zYjWebcWZyGIIbYHCJApwhRnuYcHOP+ZUs=";
};
postPatch = ''
@@ -1,38 +0,0 @@
{
lib,
aiohttp,
buildPythonPackage,
docopt,
fetchPypi,
pyyaml,
}:
buildPythonPackage rec {
pname = "eliqonline";
version = "1.2.2";
format = "setuptools";
src = fetchPypi {
inherit pname version;
sha256 = "hOUN4cA4pKVioIrfJM02GOnZdDRc7xbNtvHfoD3//bM=";
};
propagatedBuildInputs = [
aiohttp
docopt
pyyaml
];
# Project has no tests
doCheck = false;
pythonImportsCheck = [ "eliqonline" ];
meta = {
description = "Python client to the Eliq Online API";
mainProgram = "eliqonline";
homepage = "https://github.com/molobrakos/eliqonline";
license = lib.licenses.lgpl3Only;
maintainers = with lib.maintainers; [ fab ];
};
}
@@ -8,14 +8,14 @@
pytestCheckHook,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "fido2";
version = "2.1.1";
version = "2.2.1";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-8TefhFhwzH/GTH8HMjw85B6MlsNwVOeeCs1WMLP+xaw=";
inherit (finalAttrs) pname version;
hash = "sha256-hXh0KKlMP46vcvD/MK+6mDtVmhsbeVyTMYyBtK1AYsQ=";
};
build-system = [ poetry-core ];
@@ -28,7 +28,10 @@ buildPythonPackage rec {
pcsc = [ pyscard ];
};
nativeCheckInputs = [ pytestCheckHook ];
nativeCheckInputs = [
pytestCheckHook
]
++ lib.concatAttrValues finalAttrs.passthru.optional-dependencies;
pytestFlags = [
"-v"
@@ -40,8 +43,8 @@ buildPythonPackage rec {
meta = {
description = "Provides library functionality for FIDO 2.0, including communication with a device over USB";
homepage = "https://github.com/Yubico/python-fido2";
changelog = "https://github.com/Yubico/python-fido2/releases/tag/${version}";
changelog = "https://github.com/Yubico/python-fido2/releases/tag/${finalAttrs.version}";
license = lib.licenses.bsd2;
maintainers = with lib.maintainers; [ prusnak ];
};
}
})
@@ -16,14 +16,14 @@
buildPythonPackage rec {
pname = "forecast-solar";
version = "5.0.0";
version = "5.0.1";
pyproject = true;
src = fetchFromGitHub {
owner = "home-assistant-libs";
repo = "forecast_solar";
tag = "v${version}";
hash = "sha256-gFa1jq4Dq6fWqL/3eY+OGcJU+T+R6TZs8CX1ynnW+pU=";
hash = "sha256-fvmi5kwVAScVlGpxutjH8nl0lJx/VnQEVoj9a1UY7r4=";
};
build-system = [ poetry-core ];
@@ -1,34 +0,0 @@
{
lib,
buildPythonPackage,
fetchPypi,
setuptools,
requests,
}:
buildPythonPackage rec {
pname = "gitterpy";
version = "0.1.7";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-nmZ6sVjrHRLfvXMr/fYiN+a4Wly87YKwAR+heP/sNkE=";
};
build-system = [ setuptools ];
dependencies = [ requests ];
# Package has no tests
doCheck = false;
pythonImportsCheck = [ "gitterpy" ];
meta = {
description = "Python interface for the Gitter API";
homepage = "https://github.com/MichaelYusko/GitterPy";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.jamiemagee ];
};
}
@@ -1,40 +0,0 @@
{
lib,
buildPythonPackage,
fetchPypi,
setuptools,
requests,
xmltodict,
urllib3,
}:
buildPythonPackage rec {
pname = "greenwavereality";
version = "0.5.1";
pyproject = true;
src = fetchPypi {
inherit pname version;
hash = "sha256-bNTO9qHoOe3A7TYiUwLBVq4eWyGoIfCoguizM1hKk/Y=";
};
build-system = [ setuptools ];
dependencies = [
requests
xmltodict
urllib3
];
# Module has no tests
doCheck = false;
pythonImportsCheck = [ "greenwavereality" ];
meta = {
description = "Control of Greenwave Reality Lights";
homepage = "https://github.com/dfiel/greenwavereality";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.jamiemagee ];
};
}
@@ -20,14 +20,14 @@
buildPythonPackage (finalAttrs: {
pname = "habluetooth";
version = "6.8.1";
version = "6.26.5";
pyproject = true;
src = fetchFromGitHub {
owner = "Bluetooth-Devices";
repo = "habluetooth";
tag = "v${finalAttrs.version}";
hash = "sha256-a6qYBCN4nlJ0KRqGSbE6D5YySrvhi2kqAArMKa5A6sM=";
hash = "sha256-IM3M4fWTdD4wT3UsNiLZq7QX3p9pf+lR3x84vuOICMM=";
};
build-system = [
@@ -16,7 +16,7 @@
let
pname = "hassil";
version = "3.7.0";
version = "3.8.0";
in
buildPythonPackage rec {
inherit pname version;
@@ -26,7 +26,7 @@ buildPythonPackage rec {
owner = "home-assistant";
repo = "hassil";
tag = "v${version}";
hash = "sha256-C3nx8w0y4RsHq9txwdSfgS9BMcY4TyZiBOq4QIq5w+0=";
hash = "sha256-b+ykT6P9yG8jZZN92K76uBaKTJpV6lkcqP3AAYbj3dU=";
};
build-system = [ setuptools ];
@@ -10,14 +10,14 @@
buildPythonPackage (finalAttrs: {
pname = "hole";
version = "0.9.1";
version = "0.9.2";
pyproject = true;
src = fetchFromGitHub {
owner = "home-assistant-ecosystem";
repo = "python-hole";
tag = finalAttrs.version;
hash = "sha256-rIKb6GeULi2ooNtWD2a23JQxO9HkXiUYy0AroYeVeKU=";
hash = "sha256-j9fwetfxc0HG+Ly+MpRYL3jDHAwtt+Ls3tUcizHuUrg=";
};
build-system = [ hatchling ];
@@ -8,14 +8,14 @@
buildPythonPackage (finalAttrs: {
pname = "infrared-protocols";
version = "5.8.1";
version = "6.3.1";
pyproject = true;
src = fetchFromGitHub {
owner = "home-assistant-libs";
repo = "infrared-protocols";
tag = finalAttrs.version;
hash = "sha256-CSVnH+U/dqp5vjA4eWEJEFT0LZgaAG3OC1rcgyKIcJE=";
hash = "sha256-6kyb0a0cCwVSS4evDGg0Z7wLGhDUHnLeXUJ9PW+fhHk=";
};
build-system = [ setuptools ];
@@ -13,14 +13,14 @@
buildPythonPackage (finalAttrs: {
pname = "iometer";
version = "1.0.1";
version = "1.0.2";
pyproject = true;
src = fetchFromGitHub {
owner = "iometer-gmbh";
repo = "iometer.py";
tag = finalAttrs.version;
hash = "sha256-ksf/nZHv4/JRHo5OrFp6lgPF62DD37ELFfUVkL+TDEo=";
tag = "v${finalAttrs.version}";
hash = "sha256-50tq+z1+8CX58Yj6GztYXStHMG+IncOHDgwK8WhxVcQ=";
};
build-system = [ poetry-core ];
@@ -0,0 +1,61 @@
{
aiosqlite,
asyncpg,
buildPythonPackage,
fetchFromGitHub,
lib,
pytest-asyncio,
pytestCheckHook,
pytest-cov-stub,
setuptools,
sqlalchemy,
}:
buildPythonPackage (finalAttrs: {
pname = "knx-telegram-store";
version = "0.4.0";
pyproject = true;
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "XKNX";
repo = "knx-telegram-store";
tag = "v${finalAttrs.version}";
hash = "sha256-t4Bmm5n9+XSBiR2Rvm6UKAKweH9fQuZwaNqG1W2q3Co=";
};
build-system = [
setuptools
];
optional-dependencies = {
postgres = [
asyncpg
sqlalchemy
];
sqlite = [
aiosqlite
sqlalchemy
];
};
nativeCheckInputs = [
pytest-asyncio
pytest-cov-stub
pytestCheckHook
]
++ finalAttrs.passthru.optional-dependencies.sqlite;
pythonImportsCheck = [
"knx_telegram_store"
];
meta = {
description = "Standalone, host-agnostic Python library for KNX telegram persistence";
homepage = "https://github.com/XKNX/knx-telegram-store";
changelog = "https://github.com/XKNX/knx-telegram-store/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ hexa ];
};
})
@@ -18,13 +18,13 @@
buildPythonPackage (finalAttrs: {
pname = "mozart-api";
version = "5.3.1.108.2";
version = "6.2.0.44.1";
pyproject = true;
src = fetchPypi {
pname = "mozart_api";
inherit (finalAttrs) version;
hash = "sha256-ilUSGgc4m6iMBUuSI7qt7c4DAE8cOPTzLGeQ4JQAB8U=";
hash = "sha256-HJKxw49hGjVedjpCzxfbL8v6b6MXXqE96hlL5U64r5Y=";
};
build-system = [ poetry-core ];
@@ -17,14 +17,14 @@
buildPythonPackage rec {
pname = "msmart-ng";
version = "2026.4.1";
version = "2026.7.0";
pyproject = true;
src = fetchFromGitHub {
owner = "mill1000";
repo = "midea-msmart";
tag = version;
hash = "sha256-kWKdNu5IxBly+4SMIFYF1V3s5stpTbYvvcXpVtG51vM=";
hash = "sha256-OW5++yd+o2KqaFWTo/RiLjK1HO2l9WSDxkiX3lYtaUs=";
};
build-system = [
@@ -15,14 +15,14 @@
buildPythonPackage rec {
pname = "music-assistant-client";
version = "1.3.5";
version = "1.3.6";
pyproject = true;
src = fetchFromGitHub {
owner = "music-assistant";
repo = "client";
tag = version;
hash = "sha256-1yJTn8gnEFkoWGQHItpdO77ltE1Ai5z9hmJvakxyi24=";
hash = "sha256-uK3suOFhRJT6ji5ksdH3Y4iO9ysdbyZWVNTThJvGiGc=";
};
postPatch = ''
@@ -23,14 +23,14 @@ buildPythonPackage (finalAttrs: {
pname = "music-assistant-models";
# Must be compatible with music-assistant-client package
# nixpkgs-update: no auto update
version = "1.1.115";
version = "1.1.139";
pyproject = true;
src = fetchFromGitHub {
owner = "music-assistant";
repo = "models";
tag = finalAttrs.version;
hash = "sha256-oEXL0B8JNH4PcltpES375ov7QGs+gtYKlMGr1B7BlKY=";
hash = "sha256-AT+R0Sor3aDqydGfT8gJfk9/rEpqEOad5ytnGnW7B1U=";
};
postPatch = ''
@@ -0,0 +1,13 @@
diff --git a/opuslib_next/api/__init__.py b/opuslib_next/api/__init__.py
index dc498b2..b2ded08 100644
--- a/opuslib_next/api/__init__.py
+++ b/opuslib_next/api/__init__.py
@@ -15,7 +15,7 @@ __copyright__ = "Copyright (c) 2025, Kalicyh"
__license__ = "BSD 3-Clause License"
-lib_location = find_library("opus")
+lib_location = "@libopus@"
if lib_location is None:
# find opus library in macOS
@@ -0,0 +1,54 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
hatchling,
libopus,
pytestCheckHook,
replaceVars,
stdenv,
}:
buildPythonPackage (finalAttrs: {
pname = "opuslib-next";
version = "1.3.0";
pyproject = true;
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "kalicyh";
repo = "opuslib-next";
tag = "v${finalAttrs.version}";
hash = "sha256-rR1tsijKUBUH3bZZSISsx1JUO35TZevcTcfPtoQow/E=";
};
patches = [
(replaceVars ./ctypes.patch {
libopus = "${lib.getLib libopus}/lib/libopus${stdenv.hostPlatform.extensions.sharedLibrary}";
})
];
build-system = [
hatchling
];
buildInputs = [
libopus
];
nativeCheckInputs = [
pytestCheckHook
];
pythonImportsCheck = [
"opuslib_next"
];
meta = {
description = "Python bindings to the libopus, IETF low-delay audio codec";
homepage = "https://github.com/kalicyh/opuslib-next";
changelog = "https://github.com/kalicyh/opuslib-next/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.bsd3;
maintainers = with lib.maintainers; [ hexa ];
};
})
@@ -13,7 +13,7 @@
buildPythonPackage (finalAttrs: {
pname = "ouman-eh-800-api";
version = "0.5.0";
version = "1.0.0";
pyproject = true;
disabled = pythonOlder "3.13";
@@ -22,7 +22,7 @@ buildPythonPackage (finalAttrs: {
owner = "Markus98";
repo = "ouman-eh-800-api";
tag = "v${finalAttrs.version}";
hash = "sha256-1CEn44Uw+OH4DXcATt6qvsi3Ce4ghorWyS7lBhO2lH4=";
hash = "sha256-lY6aC2d31M4I5O1J9vIBH83MMiJ941cMixTsGP5I0OM=";
};
postPatch = ''
@@ -10,14 +10,14 @@
buildPythonPackage (finalAttrs: {
pname = "pajgps-api";
version = "0.3.1";
version = "0.4.0";
pyproject = true;
src = fetchFromGitHub {
owner = "skipperro";
repo = "pajgps-api";
tag = finalAttrs.version;
hash = "sha256-OJbWF5KcqyRud0Sfx7rME+mXIjiZQD9UxD3vpeV6RWY=";
hash = "sha256-7NVr75ss9vUjyn0Yz+bpZVdN4gDx4gvpdDV1bWLKOIQ=";
};
build-system = [ hatchling ];
@@ -11,7 +11,7 @@
buildPythonPackage rec {
pname = "py-ccm15";
version = "0.1.2";
version = "1.1.2";
pyproject = true;
src = fetchFromGitHub {
@@ -21,7 +21,7 @@ buildPythonPackage rec {
# Therefore it should not be marked unstable
# upstream issue: https://github.com/ocalvo/py-ccm15/issues/10
tag = "v${version}";
hash = "sha256-QfitJzCFk0gnlcCvvKzuI4fS1lVm79q4xaDZFKKt458=";
hash = "sha256-qEowsu7ebnD5eCR7SiWEqLwR3yqoqOnuw4wSQm4rmHQ=";
};
build-system = [ setuptools ];
@@ -13,14 +13,14 @@
buildPythonPackage rec {
pname = "py-synologydsm-api";
version = "2.10.1";
version = "2.10.2";
pyproject = true;
src = fetchFromGitHub {
owner = "mib1185";
repo = "py-synologydsm-api";
tag = "v${version}";
hash = "sha256-3NfI+wth0UTBbByFIsUgyyu7SCmbpNu8necNl7KOAxY=";
hash = "sha256-LILtlgUCSL+107axBZOIjqbS4kAXWLxt9936tpvW3XA=";
};
build-system = [ setuptools ];
@@ -12,14 +12,14 @@
buildPythonPackage rec {
pname = "pyanglianwater";
version = "3.2.3";
version = "3.2.4";
pyproject = true;
src = fetchFromGitHub {
owner = "pantherale0";
repo = "pyanglianwater";
tag = version;
hash = "sha256-hXHkRiKnv59TW1Wr2aJcMvW65SQbkfSokGjh9AvmN3s=";
hash = "sha256-AkdWWiw1FMs/uuJNSocMBpReXY2mrxouQfWuu4ntRWY=";
};
build-system = [ setuptools ];
@@ -2,28 +2,34 @@
lib,
buildPythonPackage,
fetchFromGitHub,
setuptools-scm,
hatchling,
hatch-vcs,
aiohttp,
pydantic,
pytz,
voluptuous,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "pygti";
version = "0.10.0";
version = "1.1.1";
pyproject = true;
src = fetchFromGitHub {
owner = "vigonotion";
repo = "pygti";
tag = version;
hash = "sha256-2T4Yw4XEOkv+IWyB4Xa2dPu929VH0tLeUjQ5S8EVXz0=";
tag = "v${finalAttrs.version}";
hash = "sha256-B+jz91xoN7GiU4PnJTG5Kt1eA4ST63d+ZEgRrr9Xio8=";
};
build-system = [ setuptools-scm ];
build-system = [
hatchling
hatch-vcs
];
dependencies = [
aiohttp
pydantic
pytz
voluptuous
];
@@ -38,10 +44,10 @@ buildPythonPackage rec {
];
meta = {
changelog = "https://github.com/vigonotion/pygti/releases/tag/${src.tag}";
changelog = "https://github.com/vigonotion/pygti/releases/tag/${finalAttrs.src.tag}";
description = "Access public transport information in Hamburg, Germany";
homepage = "https://github.com/vigonotion/pygti";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ dotlambda ];
};
}
})
@@ -7,27 +7,32 @@
fido2,
keyring,
keyrings-alt,
protobuf,
pydantic,
pytest-mock,
pytest-socket,
pytestCheckHook,
pythonAtLeast,
requests,
rich,
setuptools,
setuptools-scm,
srp,
tinyhtml,
typer,
tzlocal,
}:
buildPythonPackage (finalAttrs: {
pname = "pyicloud";
version = "2.4.1";
version = "2.6.5";
pyproject = true;
src = fetchFromGitHub {
owner = "timlaing";
repo = "pyicloud";
tag = finalAttrs.version;
hash = "sha256-6Z5YhEqRzThQM5nHG0o+q4Rm/+A/ss3N6RDRz6mPJm4=";
hash = "sha256-wlBVQPGGt8Q6EeLceORfRn+MtRKtmum+z3WAG6ZR+2Q=";
};
build-system = [
@@ -41,16 +46,27 @@ buildPythonPackage (finalAttrs: {
fido2
keyring
keyrings-alt
protobuf
pydantic
requests
srp
tinyhtml
tzlocal
];
optional-dependencies = {
cli = [
rich
typer
];
};
nativeCheckInputs = [
pytest-mock
pytest-socket
pytestCheckHook
];
]
++ lib.concatAttrValues finalAttrs.passthru.optional-dependencies;
pythonImportsCheck = [ "pyicloud" ];
@@ -12,16 +12,16 @@
setuptools,
}:
buildPythonPackage rec {
buildPythonPackage (finalAttrs: {
pname = "pyipma";
version = "3.0.9";
version = "3.0.10";
pyproject = true;
src = fetchFromGitHub {
owner = "dgomes";
repo = "pyipma";
tag = version;
hash = "sha256-1EUOkNwNoZQEetJ5v6httas0S0a3bHLv/lDRXQsT/Ds=";
tag = "v${finalAttrs.version}";
hash = "sha256-f1V+8So8TmR9Cu2fjD3B7EqeJd9e1G9cgCNytGul2Eo=";
};
build-system = [ setuptools ];
@@ -41,6 +41,11 @@ buildPythonPackage rec {
pythonImportsCheck = [ "pyipma" ];
disabledTests = [
# Test requires network access
"test_retrieve_returns_json_response_from_api"
];
disabledTestPaths = [
# Tests require network access
"tests/test_auxiliar.py"
@@ -51,8 +56,8 @@ buildPythonPackage rec {
meta = {
description = "Library to retrieve information from Instituto Português do Mar e Atmosfera";
homepage = "https://github.com/dgomes/pyipma";
changelog = "https://github.com/dgomes/pyipma/releases/tag/${src.tag}";
changelog = "https://github.com/dgomes/pyipma/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ fab ];
};
}
})
@@ -16,14 +16,14 @@
buildPythonPackage (finalAttrs: {
pname = "pylamarzocco";
version = "2.3.0";
version = "2.4.2";
pyproject = true;
src = fetchFromGitHub {
owner = "zweckj";
repo = "pylamarzocco";
tag = "v${finalAttrs.version}";
hash = "sha256-DNlUdnJjaYUfz8X8UmzqjHwj+WGmRQZQGDkHUjrAJ7E=";
hash = "sha256-9wqSF67MNxnGvDDDVY9epI3hoV8M20L3Fyz80/x8G74=";
};
build-system = [ setuptools ];
@@ -1,9 +1,11 @@
{
lib,
aiohttp,
aiointercept,
aioresponses,
buildPythonPackage,
deepdiff,
fastmcp,
fetchFromGitHub,
hatchling,
pycognito,
@@ -18,14 +20,14 @@
buildPythonPackage (finalAttrs: {
pname = "pylitterbot";
version = "2025.4.0";
version = "2025.6.0";
pyproject = true;
src = fetchFromGitHub {
owner = "natekspencer";
repo = "pylitterbot";
tag = finalAttrs.version;
hash = "sha256-k10QYIdV8EFGR/366IZ6OaXbK+kEcaz3Awdwu116zHA=";
hash = "sha256-shn218uasWtZidnmhAVU0bG9BVfrN/0Gy1iy01LGfrc=";
};
build-system = [
@@ -34,8 +36,10 @@ buildPythonPackage (finalAttrs: {
];
dependencies = [
aiointercept
aiohttp
deepdiff
fastmcp
pycognito
pyjwt
];
@@ -21,14 +21,14 @@
buildPythonPackage (finalAttrs: {
pname = "pymodbus";
version = "3.12.1";
version = "3.13.1";
pyproject = true;
src = fetchFromGitHub {
owner = "pymodbus-dev";
repo = "pymodbus";
tag = "v${finalAttrs.version}";
hash = "sha256-ISfAqZu6BSuXoISo8me7Z7BjvoEj6c2KgvuScjEiqd4=";
hash = "sha256-gaCD3bhwBXF08vn3v9OU2mT1WJycrqgtxUC8sRLmZ8Y=";
};
__darwinAllowLocalNetworking = true;
@@ -1,41 +0,0 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
requests,
setuptools,
setuptools-scm,
}:
buildPythonPackage rec {
pname = "pymsteams";
version = "0.2.5";
pyproject = true;
src = fetchFromGitHub {
owner = "rveachkc";
repo = "pymsteams";
tag = version;
hash = "sha256-Ze25mcXCRaon6qzWzcltD8kwJTfrG2w5jMswXymmKo4=";
};
build-system = [
setuptools
setuptools-scm
];
dependencies = [ requests ];
# Tests require network access
doCheck = false;
pythonImportsCheck = [ "pymsteams" ];
meta = {
description = "Python module to interact with Microsoft Teams";
homepage = "https://github.com/rveachkc/pymsteams";
changelog = "https://github.com/rveachkc/pymsteams/releases/tag/${version}";
license = with lib.licenses; [ asl20 ];
maintainers = with lib.maintainers; [ fab ];
};
}
@@ -15,19 +15,22 @@
buildPythonPackage (finalAttrs: {
pname = "pyomie";
version = "1.1.1";
version = "1.1.3";
pyproject = true;
src = fetchFromGitHub {
owner = "luuuis";
repo = "pyomie";
tag = "v${finalAttrs.version}";
hash = "sha256-BOaOClTXeoRxWb2aJKN6+lQRCLAShvHPXsUZBbH0mno=";
hash = "sha256-gsCPqKBzQ0nA47WT30PesGuJ4/jicYsFXl04KQ8H/KQ=";
};
build-system = [ poetry-core ];
pythonRelaxDeps = [ "typer" ];
pythonRelaxDeps = [
"click"
"typer"
];
dependencies = [
aiohttp
@@ -5,9 +5,9 @@
backoff,
boto3,
buildPythonPackage,
cattrs,
fetchFromGitHub,
hatchling,
pyhumps,
pytest-asyncio,
pytestCheckHook,
warrant-lite,
@@ -15,14 +15,14 @@
buildPythonPackage (finalAttrs: {
pname = "pyoverkiz";
version = "1.20.6";
version = "2.0.3";
pyproject = true;
src = fetchFromGitHub {
owner = "iMicknl";
repo = "python-overkiz-api";
tag = "v${finalAttrs.version}";
hash = "sha256-Zbz4l5bPvFQaek6/Nbn+PzAzLS3l2PyetuxOBVsuLPk=";
hash = "sha256-kKaT9YimH9o5yI7x9T9TSrcvwKEQ5M/HRnZp5S4xbGE=";
};
build-system = [ hatchling ];
@@ -31,11 +31,16 @@ buildPythonPackage (finalAttrs: {
aiohttp
attrs
backoff
boto3
pyhumps
warrant-lite
cattrs
];
optional-dependencies = {
nexity = [
boto3
warrant-lite
];
};
nativeCheckInputs = [
pytest-asyncio
pytestCheckHook
@@ -14,6 +14,7 @@
redis,
# test
aiohttp,
pytestCheckHook,
pytest-asyncio,
pytest-xdist,
@@ -22,14 +23,14 @@
buildPythonPackage rec {
pname = "pyrate-limiter";
version = "4.1.0";
version = "4.4.0";
pyproject = true;
src = fetchFromGitHub {
owner = "vutran1710";
repo = "PyrateLimiter";
tag = "v${version}";
hash = "sha256-2gWbabdRqwWiC4xbMx/VGBwwMcygVMKJswXgd4Ia+xE=";
hash = "sha256-DT4WyGrayI12Sid6yLOit68vW/YT4cHsRYjd4oo0/J8=";
};
build-system = [
@@ -55,6 +56,7 @@ buildPythonPackage rec {
];
nativeCheckInputs = [
aiohttp
filelock
pytestCheckHook
pytest-asyncio
@@ -4,25 +4,29 @@
buildPythonPackage,
fetchFromGitHub,
setuptools,
setuptools-scm,
}:
buildPythonPackage (finalAttrs: {
pname = "pyrisco";
version = "0.7.0";
version = "0.8.0";
pyproject = true;
src = fetchFromGitHub {
owner = "OnFreund";
repo = "pyrisco";
tag = "v${finalAttrs.version}";
hash = "sha256-moFKikAIBLWfkpADjNKqZd3jAg5LPapubB1pGmx8OPo=";
hash = "sha256-tzCwimkSLazD6LtimFUcRjOvnvSlYY1MpJLZ2u4WgUg=";
};
build-system = [ setuptools ];
build-system = [
setuptools
setuptools-scm
];
dependencies = [ aiohttp ];
# Project has no tests
# All tests require cloud access
doCheck = false;
pythonImportsCheck = [ "pyrisco" ];
@@ -29,10 +29,6 @@ buildPythonPackage (finalAttrs: {
version = "0.6";
pyproject = true;
# Almost all tests fail with:
# RuntimeError: There is no current event loop in thread 'MainThread'
disabled = pythonAtLeast "3.14";
src = fetchFromGitHub {
owner = "KimiNewt";
repo = "pyshark";
@@ -58,6 +54,8 @@ buildPythonPackage (finalAttrs: {
(replaceVars ./hardcode-tshark-path.patch {
tshark = lib.getExe' wireshark-cli "tshark";
})
# Compat for Python 3.14 asyncio changes
./py314-compat.patch
];
sourceRoot = "${finalAttrs.src.name}/src";
@@ -81,6 +79,13 @@ buildPythonPackage (finalAttrs: {
# KeyError: 'Packet of index 0 does not exist in capture'
"test_getting_packet_summary"
]
++ lib.optionals (pythonAtLeast "3.14") [
# _pickle.PicklingError: logger cannot be pickled
"test_iterate_empty_psml_capture"
# configparser.NoSectionError: No section: 'tshark'
# Path is mocked, and yet...
"test_get_tshark_path"
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
# fails on darwin
# _pickle.PicklingError: logger cannot be pickled
@@ -0,0 +1,37 @@
diff --git a/src/pyshark/capture/capture.py b/src/pyshark/capture/capture.py
index b7aef6e..8967398 100644
--- a/src/pyshark/capture/capture.py
+++ b/src/pyshark/capture/capture.py
@@ -182,25 +182,16 @@ class Capture:
asyncio.set_event_loop(self.eventloop)
else:
try:
- self.eventloop = asyncio.get_event_loop_policy().get_event_loop()
+ self.eventloop = asyncio.get_running_loop()
except RuntimeError:
- if threading.current_thread() != threading.main_thread():
- # Ran not in main thread, make a new eventloop
+ try:
+ # Python <3.14: may return an existing non-running loop.
+ self.eventloop = asyncio.get_event_loop()
+ except RuntimeError:
+ # Python 3.14+: no loop exists for this thread.
self.eventloop = asyncio.new_event_loop()
asyncio.set_event_loop(self.eventloop)
- else:
- raise
- if os.name == "posix" and isinstance(threading.current_thread(), threading._MainThread):
- # The default child watchers (ThreadedChildWatcher) attach_loop method is empty!
- # While using pyshark with ThreadedChildWatcher, asyncio could raise a ChildProcessError
- # "Unknown child process pid %d, will report returncode 255"
- # This led to a TSharkCrashException in _cleanup_subprocess.
- # Using the SafeChildWatcher fixes this issue, but it is slower.
- # SafeChildWatcher O(n) -> large numbers of processes are slow
- # ThreadedChildWatcher O(1) -> independent of process number
- # asyncio.get_child_watcher().attach_loop(self.eventloop)
- asyncio.set_child_watcher(asyncio.SafeChildWatcher())
- asyncio.get_child_watcher().attach_loop(self.eventloop)
+
def _packets_from_tshark_sync(self, packet_count=None, existing_process=None):
"""Returns a generator of packets.
@@ -16,14 +16,14 @@
buildPythonPackage rec {
pname = "pysmlight";
version = "0.3.2";
version = "0.5.2";
pyproject = true;
src = fetchFromGitHub {
owner = "smlight-tech";
repo = "pysmlight";
tag = "v${version}";
hash = "sha256-LsHxHHBTJCeB78y2Zv4ESzMwBDH2DB49uGyrmO8IVo0=";
hash = "sha256-zqb2rfY3JDnIhlaevqX+/ppX5YhB8xUeIrrM4OQKEq0=";
};
build-system = [
@@ -19,14 +19,14 @@
buildPythonPackage (finalAttrs: {
pname = "python-bsblan";
version = "6.0.1";
version = "6.1.5";
pyproject = true;
src = fetchFromGitHub {
owner = "liudger";
repo = "python-bsblan";
tag = "v${finalAttrs.version}";
hash = "sha256-4ds/zYedmdLA7zLe2KoJ4DMzHJC8459KjZIJlHrfWEQ=";
hash = "sha256-D3uhEk4VK9kpuwPh3R+oswMaQZQfuTIUwvUnb5HAMFM=";
};
postPatch = ''
@@ -1,41 +0,0 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
setuptools,
protobuf,
}:
buildPythonPackage rec {
pname = "python-clementine-remote";
version = "1.0.3";
pyproject = true;
src = fetchFromGitHub {
owner = "jjmontesl";
repo = "python-clementine-remote";
tag = version;
hash = "sha256-tPaxRBvt+tW4yV5Ap3YxMQxK3o7BJF3nP/wzBJeDgic=";
};
build-system = [ setuptools ];
dependencies = [ protobuf ];
# Project has no tests
doCheck = false;
env = {
# https://github.com/jjmontesl/python-clementine-remote/pull/7
PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION = "python";
};
pythonImportsCheck = [ "clementineremote" ];
meta = {
description = "Python library and CLI for the Clementine Music Player remote protocol";
homepage = "https://github.com/jjmontesl/python-clementine-remote";
license = lib.licenses.asl20;
maintainers = [ lib.maintainers.jamiemagee ];
};
}
@@ -12,14 +12,14 @@
buildPythonPackage (finalAttrs: {
pname = "python-duco-connectivity";
version = "0.5.0";
version = "0.7.1";
pyproject = true;
src = fetchFromGitHub {
owner = "ronaldvdmeer";
repo = "python-duco-connectivity";
tag = "v${finalAttrs.version}";
hash = "sha256-AH8EhC0v8GDNvPSUaTownV9d4upvKRiO//2sipGHz9g=";
hash = "sha256-Txm7l7fVkEcUIX2J5CEF3OLLgTiT9O/xva0tSCCMZpI=";
};
build-system = [ setuptools ];
@@ -9,21 +9,25 @@
pytestCheckHook,
pytest-asyncio,
setuptools,
setuptools-scm,
}:
buildPythonPackage (finalAttrs: {
pname = "python-openevse-http";
version = "0.3.4";
version = "1.0.1";
pyproject = true;
src = fetchFromGitHub {
owner = "firstof9";
repo = "python-openevse-http";
tag = finalAttrs.version;
hash = "sha256-H5kRn8TmTpaX1qf94N2l1qOm03upFzHFistZDLFu/Zs=";
hash = "sha256-X87nS/h+Lh//rf8pNrlX22HOpT3Bz/6QgWBfQEaDQP8=";
};
build-system = [ setuptools ];
build-system = [
setuptools
setuptools-scm
];
dependencies = [
aiohttp
@@ -8,18 +8,19 @@
pytest-asyncio,
pytestCheckHook,
setuptools,
websockets,
}:
buildPythonPackage rec {
pname = "python-pooldose";
version = "0.9.1";
version = "0.9.6";
pyproject = true;
src = fetchFromGitHub {
owner = "lmaertin";
repo = "python-pooldose";
tag = version;
hash = "sha256-1WHNiVPquL/D5lpN27iXSA2cWU+VjCPIcW9Th65axVA=";
hash = "sha256-eSFe3PRKhVMuwJ7XUHRec8nPilSxGUQ1T2k2loLubUg=";
};
build-system = [ setuptools ];
@@ -28,6 +29,7 @@ buildPythonPackage rec {
aiofiles
aiohttp
getmac
websockets
];
pythonImportsCheck = [ "pooldose" ];
@@ -15,23 +15,26 @@
pycryptodome,
pycryptodomex,
pyrate-limiter,
pyshark,
pytest-asyncio,
pytestCheckHook,
pyyaml,
vacuum-map-parser-roborock,
click-shell,
syrupy,
writableTmpDirAsHomeHook,
}:
buildPythonPackage (finalAttrs: {
pname = "python-roborock";
version = "5.14.0";
version = "5.25.0";
pyproject = true;
src = fetchFromGitHub {
owner = "Python-roborock";
repo = "python-roborock";
tag = "v${finalAttrs.version}";
hash = "sha256-SqFU7hhcykP/VSSiPLQPi62iAkgcSw6vwmXq+FpIt9w=";
hash = "sha256-Uj7rr9vAdZBseeePQU1/3bILwsI0P2CDy1bGu6R90Cg=";
};
pythonRelaxDeps = [
@@ -44,24 +47,31 @@ buildPythonPackage (finalAttrs: {
dependencies = [
aiohttp
aiomqtt
click
construct
paho-mqtt
protobuf
pycryptodome
pyrate-limiter
vacuum-map-parser-roborock
click-shell
]
++ lib.optionals stdenv.hostPlatform.isDarwin [ pycryptodomex ];
optional-dependencies.cli = [
click
click-shell
pyyaml
pyshark
];
nativeCheckInputs = [
aioresponses
freezegun
pytest-asyncio
pytestCheckHook
syrupy
];
writableTmpDirAsHomeHook
]
++ lib.concatAttrValues finalAttrs.passthru.optional-dependencies;
__darwinAllowLocalNetworking = true;
@@ -4,19 +4,20 @@
fetchFromGitHub,
hatchling,
hatch-vcs,
aiofiles,
aiohttp,
}:
buildPythonPackage (finalAttrs: {
pname = "pywmspro";
version = "0.3.5";
version = "0.4.1";
pyproject = true;
src = fetchFromGitHub {
owner = "mback2k";
repo = "pywmspro";
tag = finalAttrs.version;
hash = "sha256-01jXkSZfmBIzrz0B/4/KLcAU4jUQGDfle4sE4saraJo=";
hash = "sha256-gpAAGrM/dLSD7rCbYM9O3hVCvDb0QA0joZG7h+jTfCg=";
};
build-system = [
@@ -24,7 +25,10 @@ buildPythonPackage (finalAttrs: {
hatch-vcs
];
dependencies = [ aiohttp ];
dependencies = [
aiofiles
aiohttp
];
# Package has no tests
doCheck = false;
@@ -10,14 +10,14 @@
buildPythonPackage (finalAttrs: {
pname = "rf-protocols";
version = "4.2.0";
version = "4.3.0";
pyproject = true;
src = fetchFromGitHub {
owner = "home-assistant-libs";
repo = "rf-protocols";
tag = finalAttrs.version;
hash = "sha256-F0pvEg+Cns3czK/yI6M0hpgRpk67jUgRKqgzCBYmgUY=";
hash = "sha256-g2e+iQXBaoGO1Yv5v+xpiM+beecErI58Ua5/FODg8Bo=";
};
build-system = [ setuptools ];
@@ -1,40 +0,0 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
pyserial,
pyyaml,
setuptools,
pytestCheckHook,
}:
buildPythonPackage rec {
pname = "scsgate";
version = "0.1.0";
pyproject = true;
src = fetchFromGitHub {
owner = "flavio";
repo = "scsgate";
tag = version;
hash = "sha256-wVzXKOKljENAKppod+guqm+0XMPenLgOsZzMQVTBo+k=";
};
build-system = [ setuptools ];
dependencies = [
pyserial
pyyaml
];
nativeCheckInputs = [ pytestCheckHook ];
pythonImportsCheck = [ "scsgate" ];
meta = {
description = "Python module to interact with SCSGate";
homepage = "https://github.com/flavio/scsgate";
license = lib.licenses.mit;
maintainers = [ lib.maintainers.jamiemagee ];
};
}
@@ -20,14 +20,14 @@
buildPythonPackage (finalAttrs: {
pname = "serialx";
version = "1.8.1";
version = "1.8.2";
pyproject = true;
src = fetchFromGitHub {
owner = "puddly";
repo = "serialx";
tag = "v${finalAttrs.version}";
hash = "sha256-89lRB96lit4XxPhACnZ3Lv01G0IcddlwyPTttrWwsLQ=";
hash = "sha256-/Bx8TnO3h+Pk/Tg5YSYO96cK5PfJVwqRG0qdLJntNpQ=";
};
cargoDeps = rustPlatform.fetchCargoVendor {
@@ -12,14 +12,14 @@
buildPythonPackage (finalAttrs: {
pname = "teltasync";
version = "0.3.1";
version = "0.4.0";
pyproject = true;
src = fetchFromCodeberg {
owner = "dmho";
repo = "teltasync";
tag = "v${finalAttrs.version}";
hash = "sha256-TXVdOT0EAwza/rgLPjMnBUCuq+2PwLoRAXvYTz2CT+0=";
hash = "sha256-xR4Rh2TnnsXAqicRDBQyhwpUh5zl5cWS6BuyxY/RFsE=";
};
postPatch = ''
@@ -10,14 +10,14 @@
buildPythonPackage rec {
pname = "thinqconnect";
version = "1.0.12";
version = "1.0.13";
pyproject = true;
src = fetchFromGitHub {
owner = "thinq-connect";
repo = "pythinqconnect";
tag = version;
hash = "sha256-LOIqh/f9NiaBpkJqre1TejdUN0gbguSM3s8faGPcf54=";
hash = "sha256-0efPQ0fvBLi+Bp+JbBMRJPYFqRKBVpPQFyQ9rvHpEnY=";
};
build-system = [ setuptools ];
@@ -1,40 +0,0 @@
{
lib,
buildPythonPackage,
fetchPypi,
setuptools,
bluepy,
pycryptodome,
}:
buildPythonPackage rec {
pname = "tikteck";
version = "0.4";
pyproject = true;
# github doesn't have any tags unfortunately
src = fetchPypi {
pname = "tikteck";
inherit version;
hash = "sha256-KEbGT2RXLFMQ49gltOYcbE+ebJ1kiXzhT0DIeVXsSJM=";
};
build-system = [ setuptools ];
dependencies = [
bluepy
pycryptodome
];
pythonImportsCheck = [ "tikteck" ];
# no upstream tests exist
doCheck = false;
meta = {
description = "Control Tikteck Bluetooth LED bulbs";
homepage = "https://github.com/mjg59/python-tikteck";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ ethancedwards8 ];
};
}
@@ -0,0 +1,51 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
jinja2,
pandas,
setuptools,
}:
buildPythonPackage (finalAttrs: {
pname = "tinyhtml";
version = "1.3.0";
pyproject = true;
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "niklasf";
repo = "python-tinyhtml";
tag = "v${finalAttrs.version}";
hash = "sha256-1DPQFszrNsGNEpEl4c1SNdnNfwi3bcHzCrOWdu+dTGA=";
};
build-system = [
setuptools
];
nativeCheckInputs = [
pandas
jinja2
];
# https://github.com/niklasf/python-tinyhtml/blob/master/tox.ini
checkPhase = ''
runHook preCheck
python -m doctest README.rst
runHook postCheck
'';
pythonImportsCheck = [
"tinyhtml"
];
meta = {
description = "Tiny library to safely render compact HTML5 from Python expressions";
homepage = "https://github.com/niklasf/python-tinyhtml";
changelog = "https://github.com/niklasf/python-tinyhtml/blob/${finalAttrs.src.tag}/CHANGELOG.md";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ hexa ];
};
})
@@ -39,14 +39,14 @@
buildPythonPackage (finalAttrs: {
pname = "uiprotect";
version = "10.17.0";
version = "15.4.1";
pyproject = true;
src = fetchFromGitHub {
owner = "uilibs";
repo = "uiprotect";
tag = "v${finalAttrs.version}";
hash = "sha256-q02gSnEruUM1sF4LnMWwqNRzbFhZRRxTZ3pAuRb+XDc=";
hash = "sha256-qsGLheVKhIM1aEq/KRsclf3ZQtRhtX/S8cQ5Aem8dEw=";
};
build-system = [ poetry-core ];
@@ -1,36 +0,0 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
requests,
urllib3,
}:
buildPythonPackage rec {
pname = "unifiled";
version = "1.1";
format = "setuptools";
src = fetchFromGitHub {
owner = "florisvdk";
repo = "unifiled";
rev = "v${version}";
sha256 = "1nmqxxhwa0isxdb889nhbp7w4axj1mcrwd3pr9d8nhpw4yj9h3vq";
};
propagatedBuildInputs = [
requests
urllib3
];
# Project doesn't have any tests
doCheck = false;
pythonImportsCheck = [ "unifiled" ];
meta = {
description = "Python module for Ubiquiti Unifi LED controller";
homepage = "https://github.com/florisvdk/unifiled";
license = with lib.licenses; [ mit ];
maintainers = with lib.maintainers; [ fab ];
};
}
@@ -3,20 +3,20 @@
buildPythonPackage,
fetchFromGitHub,
setuptools,
opuslib,
opuslib-next,
pytestCheckHook,
}:
buildPythonPackage rec {
pname = "voip-utils";
version = "0.3.5";
version = "0.4.0";
pyproject = true;
src = fetchFromGitHub {
owner = "home-assistant-libs";
repo = "voip-utils";
tag = "v${version}";
hash = "sha256-/HSbtP9UAGOs4aZmdinijCMe16HtBH7YuhFM7h158lc=";
hash = "sha256-kvuNqiBjcDQ53X6LbnOp2WNh8QOu+ExjhfgKWBoSsH0=";
};
postPatch = ''
@@ -26,9 +26,9 @@ buildPythonPackage rec {
build-system = [ setuptools ];
pythonRelaxDeps = [ "opuslib" ];
pythonRelaxDeps = [ "opuslib-next" ];
dependencies = [ opuslib ];
dependencies = [ opuslib-next ];
pythonImportsCheck = [ "voip_utils" ];
@@ -9,12 +9,12 @@
buildPythonPackage (finalAttrs: {
pname = "vsure";
version = "2.6.9";
version = "2.8.0";
pyproject = true;
src = fetchPypi {
inherit (finalAttrs) pname version;
hash = "sha256-BdUQB7usj1UwMS4AewUtaWWTl1otamCviX2MF/+x9ic=";
hash = "sha256-FC2aRsfxBGO8HaEHGJWweKgZzz8UG/03oB/E+hOAe/w=";
};
build-system = [ setuptools ];
@@ -9,14 +9,14 @@
buildPythonPackage (finalAttrs: {
pname = "yoto-api";
version = "3.2.0";
version = "4.3.1";
pyproject = true;
src = fetchFromGitHub {
owner = "cdnninja";
repo = "yoto_api";
tag = "v${finalAttrs.version}";
hash = "sha256-pzU+qResc+fqC1nhwbCYNNXKrD1aAjXZujjgL/5AGkc=";
hash = "sha256-Hy2OE8jol/ttZ1MsIC4EzkYa72DINwcjsHflo8+a7xo=";
};
build-system = [ setuptools ];
@@ -8,12 +8,13 @@
pythonOlder,
setuptools,
time-machine,
zha,
zigpy,
}:
buildPythonPackage rec {
pname = "zha-quirks";
version = "1.2.0";
version = "2.1.0";
pyproject = true;
disabled = pythonOlder "3.12";
@@ -22,7 +23,7 @@ buildPythonPackage rec {
owner = "zigpy";
repo = "zha-device-handlers";
tag = version;
hash = "sha256-mDcvVwqzSmszaJDahzkRNteiO4C/eU+BqTdBpWj5yGw=";
hash = "sha256-VSMGUeLx8oQ8kfGj48hcceNQTEAP98svz1MCvw5KiVc=";
};
postPatch = ''
@@ -35,6 +36,7 @@ buildPythonPackage rec {
dependencies = [
aiohttp
zha
zigpy
];
@@ -1,30 +1,32 @@
{
lib,
attrs,
bellows,
buildPythonPackage,
fetchFromGitHub,
freezegun,
frozendict,
looptime,
pyprojectVersionPatchHook,
pyserial,
pyserial-asyncio-fast,
pytest-asyncio_0,
pytest-timeout,
pytest-xdist,
pytestCheckHook,
pythonOlder,
setuptools,
zha-quirks,
zigpy,
zigpy-deconz,
zigpy-xbee,
zigpy-zigate,
zigpy-ziggurat,
zigpy-znp,
zha,
zha-quirks,
}:
buildPythonPackage (finalAttrs: {
pname = "zha";
version = "1.4.1";
version = "2.0.0";
pyproject = true;
disabled = pythonOlder "3.12";
@@ -33,7 +35,7 @@ buildPythonPackage (finalAttrs: {
owner = "zigpy";
repo = "zha";
tag = finalAttrs.version;
hash = "sha256-Jf8k/4z7eERiV2jwDzhV990sLBebasEKe5/0WbX1hYc=";
hash = "sha256-cLE30i+3dqmtasHZKgW16zThMwWbZ8wh/GFtrgWmpfE=";
};
postPatch = ''
@@ -50,14 +52,14 @@ buildPythonPackage (finalAttrs: {
];
dependencies = [
attrs
bellows
pyserial
pyserial-asyncio-fast
zha-quirks
frozendict
zigpy
zigpy-deconz
zigpy-xbee
zigpy-zigate
zigpy-ziggurat
zigpy-znp
];
@@ -68,10 +70,13 @@ buildPythonPackage (finalAttrs: {
pytest-timeout
pytest-xdist
pytestCheckHook
zha-quirks
];
pythonImportsCheck = [ "zha" ];
doCheck = false; # infinite recursion with zhaquirks
disabledTests = [
# Tests are long-running and often keep hanging
"test_check_available_no_basic_cluster_handler"
@@ -100,6 +105,10 @@ buildPythonPackage (finalAttrs: {
"test_gateway_startup_failure" # Failed first attempt, passed second, flaky
];
passthru.tests = {
pytest = zha.overridePythonAttrs { doCheck = true; };
};
meta = {
description = "Zigbee Home Automation";
homepage = "https://github.com/zigpy/zha";
@@ -37,6 +37,10 @@ buildPythonPackage rec {
zigpy
];
# lacking zigpy 2.0 compat
# https://github.com/zigpy/zigpy-xbee/pull/179
doCheck = false;
nativeCheckInputs = [
pytest-asyncio
pytestCheckHook
@@ -0,0 +1,63 @@
{
lib,
buildPythonPackage,
fetchFromGitHub,
setuptools,
aiohttp,
mashumaro,
pyprojectVersionPatchHook,
pytest-asyncio,
pytestCheckHook,
zigpy,
}:
buildPythonPackage (finalAttrs: {
pname = "zigpy-ziggurat";
version = "1.0.1";
pyproject = true;
__structuredAttrs = true;
src = fetchFromGitHub {
owner = "zigpy";
repo = "zigpy-ziggurat";
tag = "v${finalAttrs.version}";
hash = "sha256-/yOj4ktxEmfFCiZwJVrYqY0PXnZUi8/LwuaUgxTfBCs=";
};
postPatch = ''
# finds version 0.0.1 instead of 1.0.1
substituteInPlace pyproject.toml \
--replace-fail ', "setuptools-git-versioning<3"' ""
'';
nativeBuildInputs = [
pyprojectVersionPatchHook
];
build-system = [
setuptools
];
dependencies = [
aiohttp
mashumaro
zigpy
];
nativeCheckInputs = [
pytest-asyncio
pytestCheckHook
];
pythonImportsCheck = [
"zigpy_ziggurat"
];
meta = {
description = "Zigpy radio library for communicating with the Ziggurat stack";
homepage = "https://github.com/zigpy/zigpy-ziggurat";
changelog = "https://github.com/zigpy/zigpy-ziggurat/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.asl20;
maintainers = with lib.maintainers; [ hexa ];
};
})
@@ -23,14 +23,14 @@
buildPythonPackage (finalAttrs: {
pname = "zigpy";
version = "1.5.1";
version = "2.0.0";
pyproject = true;
src = fetchFromGitHub {
owner = "zigpy";
repo = "zigpy";
tag = finalAttrs.version;
hash = "sha256-AbVVv/3a/FZuk+VWLereCF7NEwu4u8HjZrsXsfarSZA=";
hash = "sha256-EQ77zEitOV3m+Jc/UrRpWFHrQm+4qA+jdBrHd4dCySg=";
};
postPatch = ''
@@ -2,7 +2,7 @@
# Do not edit!
{
version = "2026.6.4";
version = "2026.7.1";
components = {
"3_day_blinds" =
ps: with ps; [
@@ -42,10 +42,6 @@
ps: with ps; [
accuweather
];
"acer_projector" =
ps: with ps; [
serialx
];
"acmeda" =
ps: with ps; [
aiopulse
@@ -245,10 +241,6 @@
"amp_motorization" =
ps: with ps; [
];
"ampio" =
ps: with ps; [
asmog
];
"analytics" =
ps: with ps; [
aiohasupervisor
@@ -369,6 +361,9 @@
ps: with ps; [
sharp-aquos-rc
];
"aqvify" =
ps: with ps; [
]; # missing inputs: pyaqvify
"aranet" =
ps: with ps; [
aioesphomeapi
@@ -422,7 +417,7 @@
ps: with ps; [
aiohasupervisor
paho-mqtt
];
]; # missing inputs: arwn-client
"aseko_pool_live" =
ps: with ps; [
aioaseko
@@ -454,10 +449,6 @@
ps: with ps; [
pyatag
];
"aten_pe" =
ps: with ps; [
atenpdu
];
"atlanticcityelectric" =
ps: with ps; [
];
@@ -551,9 +542,8 @@
serialx
zeroconf
];
"avion" =
"avosdim" =
ps: with ps; [
avion
];
"awair" =
ps: with ps; [
@@ -643,10 +633,6 @@
ps: with ps; [
pybbox
];
"beewi_smartclim" =
ps: with ps; [
beewi-smartclim
];
"bge" =
ps: with ps; [
];
@@ -905,6 +891,9 @@
"button" =
ps: with ps; [
];
"bwt" =
ps: with ps; [
];
"caldav" =
ps: with ps; [
caldav
@@ -1005,6 +994,32 @@
ps: with ps; [
pychannels
];
"chef_iq" =
ps: with ps; [
aioesphomeapi
aiohasupervisor
aioruuvigateway
aioshelly
aiousbwatcher
bleak
bleak-esphome
bleak-retry-connector
bluetooth-adapters
bluetooth-auto-recovery
bluetooth-data-tools
dbus-fast
esphome-dashboard-api
ha-ffmpeg
habluetooth
hassil
home-assistant-intents
ifaddr
mutagen
pymicro-vad
pyspeex-noise
serialx
zeroconf
]; # missing inputs: chefiq-ble
"chess_com" =
ps: with ps; [
chess-com-api
@@ -1029,10 +1044,6 @@
ps: with ps; [
python-citybikes
];
"clementine" =
ps: with ps; [
python-clementine-remote
];
"clickatell" =
ps: with ps; [
];
@@ -1114,7 +1125,7 @@
];
"command_line" =
ps: with ps; [
jsonpath
jsonpath-python
];
"compensation" =
ps: with ps; [
@@ -1567,6 +1578,10 @@
ps: with ps; [
aioecowitt
];
"edifier_infrared" =
ps: with ps; [
infrared-protocols
];
"edimax" =
ps: with ps; [
pyedimax
@@ -1615,10 +1630,6 @@
ps: with ps; [
elgato
];
"eliqonline" =
ps: with ps; [
eliqonline
];
"elkm1" =
ps: with ps; [
elkm1-lib
@@ -1675,6 +1686,9 @@
"energie_vanons" =
ps: with ps; [
];
"energieleser" =
ps: with ps; [
]; # missing inputs: energieleser
"energy" =
ps: with ps; [
fnv-hash-fast
@@ -1707,6 +1721,9 @@
ps: with ps; [
enturclient
];
"envertech_evt800" =
ps: with ps; [
]; # missing inputs: pyenvertechevt800
"environment_canada" =
ps: with ps; [
env-canada
@@ -2276,7 +2293,6 @@
];
"gitter" =
ps: with ps; [
gitterpy
];
"glances" =
ps: with ps; [
@@ -2441,14 +2457,15 @@
ps: with ps; [
greenplanet-energy-api
];
"greencell" =
ps: with ps; [
aiohasupervisor
paho-mqtt
]; # missing inputs: greencell_client
"greeneye_monitor" =
ps: with ps; [
greeneye-monitor
];
"greenwave" =
ps: with ps; [
greenwavereality
];
"group" =
ps: with ps; [
];
@@ -2531,6 +2548,9 @@
"heiwa" =
ps: with ps; [
];
"helty" =
ps: with ps; [
]; # missing inputs: pyhelty
"heos" =
ps: with ps; [
pyheos
@@ -2977,6 +2997,9 @@
ps: with ps; [
aioimmich
];
"imou" =
ps: with ps; [
]; # missing inputs: pyimouapi
"improv_ble" =
ps: with ps; [
aioesphomeapi
@@ -3120,6 +3143,9 @@
ps: with ps; [
ha-iotawattpy
];
"iotorero" =
ps: with ps; [
];
"iotty" =
ps: with ps; [
iottycloud
@@ -3212,8 +3238,7 @@
];
"itach" =
ps: with ps; [
pyitachip2ir
];
]; # missing inputs: pyitachip2ir2
"itunes" =
ps: with ps; [
];
@@ -3358,6 +3383,10 @@
ps: with ps; [
kiwiki-client
];
"klik_aan_klik_uit" =
ps: with ps; [
rf-protocols
];
"kmtronic" =
ps: with ps; [
pykmtronic
@@ -3367,12 +3396,16 @@
knocki
];
"knx" =
ps: with ps; [
ps:
with ps;
[
home-assistant-frontend
knx-frontend
knx-telegram-store
xknx
xknxproject
];
]
++ knx-telegram-store.optional-dependencies.sqlite;
"kodi" =
ps: with ps; [
pykodi
@@ -3723,9 +3756,6 @@
psutil-home-assistant
sqlalchemy
];
"logentries" =
ps: with ps; [
];
"logger" =
ps: with ps; [
];
@@ -3945,6 +3975,9 @@
ps: with ps; [
python-melcloud
];
"melcloud_home" =
ps: with ps; [
]; # missing inputs: aiomelcloudhome
"melissa" =
ps: with ps; [
py-melissa-climate
@@ -4023,18 +4056,6 @@
ps: with ps; [
pycsspeechtts
];
"microsoft_face" =
ps: with ps; [
pyturbojpeg
];
"microsoft_face_detect" =
ps: with ps; [
pyturbojpeg
];
"microsoft_face_identify" =
ps: with ps; [
pyturbojpeg
];
"miele" =
ps: with ps; [
pymiele
@@ -4274,7 +4295,6 @@
];
"msteams" =
ps: with ps; [
pymsteams
];
"mta" =
ps: with ps; [
@@ -4418,6 +4438,9 @@
ps: with ps; [
neurio
];
"nexen" =
ps: with ps; [
];
"nexia" =
ps: with ps; [
nexia
@@ -4886,6 +4909,7 @@
universal-silabs-flasher
zeroconf
zha
zha-quirks
];
"otp" =
ps: with ps; [
@@ -4900,9 +4924,12 @@
ourgroceries
];
"overkiz" =
ps: with ps; [
ps:
with ps;
[
pyoverkiz
];
]
++ pyoverkiz.optional-dependencies.nexity;
"overseerr" =
ps: with ps; [
aiohasupervisor
@@ -5504,7 +5531,11 @@
"raspberry_pi" =
ps: with ps; [
aiohasupervisor
aiousbwatcher
ha-silabs-firmware-client
psutil-home-assistant
serialx
universal-silabs-flasher
];
"raspyrfm" =
ps: with ps; [
@@ -5592,7 +5623,7 @@
];
"rest" =
ps: with ps; [
jsonpath
jsonpath-python
xmltodict
];
"rest_command" =
@@ -5807,7 +5838,7 @@
"scrape" =
ps: with ps; [
beautifulsoup4
jsonpath
jsonpath-python
lxml
xmltodict
];
@@ -5821,10 +5852,6 @@
"script" =
ps: with ps; [
];
"scsgate" =
ps: with ps; [
scsgate
];
"search" =
ps: with ps; [
];
@@ -6297,6 +6324,9 @@
];
"srp_energy" =
ps: with ps; [
fnv-hash-fast
psutil-home-assistant
sqlalchemy
srpenergy
];
"ssdp" =
@@ -6406,7 +6436,7 @@
];
"swisscom" =
ps: with ps; [
];
]; # missing inputs: python-swisscom-internet-box
"switch" =
ps: with ps; [
];
@@ -6446,6 +6476,29 @@
];
"switchbot_cloud" =
ps: with ps; [
aiohasupervisor
aiousbwatcher
bleak
bleak-retry-connector
bluetooth-adapters
bluetooth-auto-recovery
bluetooth-data-tools
cronsim
dbus-fast
ha-ffmpeg
habluetooth
hass-nabucasa
hassil
home-assistant-intents
matter-ble-proxy
matter-python-client
mutagen
openai
pymicro-vad
pyspeex-noise
pyturbojpeg
securetar
serialx
switchbot-api
];
"switcher_kis" =
@@ -6718,10 +6771,6 @@
pytibber
sqlalchemy
];
"tikteck" =
ps: with ps; [
tikteck
];
"tile" =
ps: with ps; [
pytile
@@ -7018,10 +7067,6 @@
ps: with ps; [
unifi-discovery
];
"unifiled" =
ps: with ps; [
unifiled
];
"unifiprotect" =
ps: with ps; [
uiprotect
@@ -7314,6 +7359,9 @@
ps: with ps; [
aiowatttime
];
"wattwaechter" =
ps: with ps; [
]; # missing inputs: aio-wattwaechter
"waze_travel_time" =
ps: with ps; [
pywaze
@@ -7686,6 +7734,7 @@
serialx
universal-silabs-flasher
zha
zha-quirks
];
"zhong_hong" =
ps: with ps; [
@@ -7792,6 +7841,7 @@
"aprs"
"apsystems"
"aquacell"
"aqualogic"
"aranet"
"arcam_fmj"
"arve"
@@ -7947,6 +7997,7 @@
"econet"
"ecovacs"
"ecowitt"
"edifier_infrared"
"edl21"
"efergy"
"egauge"
@@ -7974,6 +8025,7 @@
"enocean"
"enphase_envoy"
"environment_canada"
"envisalink"
"epic_games_store"
"epion"
"epson"
@@ -8213,6 +8265,7 @@
"kiosker"
"kira"
"kitchen_sink"
"klik_aan_klik_uit"
"kmtronic"
"knocki"
"knx"
@@ -8259,7 +8312,6 @@
"locative"
"lock"
"logbook"
"logentries"
"logger"
"lojack"
"london_air"
@@ -8305,9 +8357,6 @@
"mfi"
"microbees"
"microsoft"
"microsoft_face"
"microsoft_face_detect"
"microsoft_face_identify"
"miele"
"mikrotik"
"mill"
@@ -8559,6 +8608,7 @@
"ruuvitag_ble"
"rympro"
"sabnzbd"
"saj"
"samsung_infrared"
"samsungtv"
"sanix"
@@ -8748,6 +8798,7 @@
"ukraine_alarm"
"unifi"
"unifi_access"
"unifi_direct"
"unifi_discovery"
"unifiprotect"
"universal"
@@ -7,13 +7,13 @@
buildHomeAssistantComponent rec {
owner = "andrew-codechimp";
domain = "battery_notes";
version = "3.4.7";
version = "3.4.8";
src = fetchFromGitHub {
inherit owner;
repo = "HA-Battery-Notes";
tag = version;
hash = "sha256-28yWBODUDJXSmuHgBI5+kLsPjpRM2OxUQnU1nGz83v0=";
hash = "sha256-Kc4ATfEEi8SRvl10msLotmBa3/RNff2yD4moRPsk8j8=";
};
# has no tests
@@ -10,13 +10,13 @@
buildHomeAssistantComponent (finalAttrs: {
owner = "mrk-its";
domain = "blitzortung";
version = "1.5.0";
version = "1.7.0";
src = fetchFromGitHub {
owner = "mrk-its";
repo = "homeassistant-blitzortung";
tag = "v${finalAttrs.version}";
hash = "sha256-hed7XBBV7LID12Md0FWA0KkAjEH0RB7MQ1XJOm0W3sw=";
hash = "sha256-8/KIPOmQdaaSFFrjliBBNjboPx8ewzG9/W/grBuex6s=";
};
dependencies = [
@@ -13,13 +13,13 @@
buildHomeAssistantComponent rec {
owner = "luuquangvu";
domain = "blueprints_updater";
version = "2.9.1";
version = "2.9.2";
src = fetchFromGitHub {
inherit owner;
repo = "blueprints-updater";
tag = version;
hash = "sha256-OGQ6lE14w84C88QJv5w+mNBGg7gbCtqb9nde47FkL6A=";
hash = "sha256-b6DBrG1c7reIomg9/ZrQgDig976PAbCKIl9AfA/RtmY=";
};
patches = [
@@ -9,13 +9,13 @@
buildHomeAssistantComponent rec {
owner = "dckiller51";
domain = "bodymiscale";
version = "2026.5.6";
version = "2026.7.0";
src = fetchFromGitHub {
inherit owner;
repo = domain;
rev = version;
hash = "sha256-IUGQrUVaDw4XlxFGzYsSeg4Y1UxQgbOECL6OiB3cdsg=";
hash = "sha256-xBxK5V+DwXkoaC0D5HNlH2hHn+W2KUJAZ7rk0KxIy4U=";
};
dependencies = [
@@ -10,13 +10,13 @@
buildHomeAssistantComponent rec {
owner = "thomasloven";
domain = "browser_mod";
version = "2.13.5";
version = "3.0.0";
src = fetchFromGitHub {
inherit owner;
repo = "hass-browser_mod";
tag = "v${version}";
hash = "sha256-uVMefvOiw0CMcpOSo8dJn4NazZxACvPscV4GqtyQXSY=";
hash = "sha256-s9b5JeMyT7pYyHWJtuqw2xVHrmU98kG5dBE4aBsJ+u8=";
};
nativeBuildInputs = [
@@ -27,7 +27,7 @@ buildHomeAssistantComponent rec {
npmDeps = fetchNpmDeps {
inherit src;
hash = "sha256-eX7dyDxcaPMhTOAhAbcw7beP3cwBKRz457OZgp3LRAA=";
hash = "sha256-p+1yRZVyo/EunNjBkdkl8xajZO4U7KpdIu1GzU7L8gE=";
};
npmBuildScript = "build";
@@ -19,13 +19,13 @@
buildHomeAssistantComponent rec {
owner = "danielcherubini";
domain = "elegoo_printer";
version = "2.9.0";
version = "2.10.1";
src = fetchFromGitHub {
owner = "danielcherubini";
repo = "elegoo-homeassistant";
tag = "v${version}";
hash = "sha256-lKRi90H48w9jndljoSyaHY4cVh4/qEkGGOkEs5GVk1o=";
hash = "sha256-8L4uJC9TmZ4lkEAQzDUd2txAGPveA/3iiIYzguLtOSA=";
};
dependencies = [
@@ -8,13 +8,13 @@
buildHomeAssistantComponent rec {
owner = "magico13";
domain = "emporia_vue";
version = "0.12.1";
version = "0.12.2";
src = fetchFromGitHub {
owner = "magico13";
repo = "ha-emporia-vue";
rev = "v${version}";
hash = "sha256-kdTM5keDxRNz46uwq+tXIv7Hz80lxmbQVVzk7bmRm1w=";
hash = "sha256-3S9ko1CN8eM3xVl91bwfLnRwU5T5bgXnY6slQ3u8Lk4=";
};
dependencies = [
@@ -22,6 +22,7 @@ buildHomeAssistantComponent rec {
];
ignoreVersionRequirement = [
"boto3"
"pyemvue"
];
@@ -8,13 +8,13 @@
buildHomeAssistantComponent rec {
owner = "mletenay";
domain = "goodwe";
version = "0.9.9.30";
version = "0.9.9.31";
src = fetchFromGitHub {
owner = "mletenay";
repo = "home-assistant-goodwe-inverter";
tag = "v${version}";
hash = "sha256-/R0HBR1369gjjdCInbFzUaBEclw4PJDmgRGHtlUNvCA=";
hash = "sha256-aq3m1+XBE0f/+r3RiSXU1XFq+vUwKs0phis2B34c/8w=";
};
dependencies = [
@@ -10,13 +10,13 @@
buildHomeAssistantComponent rec {
owner = "mill1000";
domain = "midea_ac";
version = "2026.4.0";
version = "2026.7.0";
src = fetchFromGitHub {
owner = "mill1000";
repo = "midea-ac-py";
tag = version;
hash = "sha256-XYajDvp7K1pBlVhT553Rqa8Hi/mA8AWwchTUN4PZ+iw=";
hash = "sha256-lZfhZRvKdeisjQAHjYxPsyS2YL486wLtuf4ERw57vZ4=";
};
dependencies = [ msmart-ng ];
@@ -11,13 +11,13 @@
buildHomeAssistantComponent rec {
owner = "BottlecapDave";
domain = "octopus_energy";
version = "18.3.1";
version = "18.3.2";
src = fetchFromGitHub {
inherit owner;
repo = "HomeAssistant-OctopusEnergy";
tag = "v${version}";
hash = "sha256-5Cjaq4DIe11hx/goKxGDSj6zyOb3H16s8KqlFRzhOYs=";
hash = "sha256-KSnpebEUzp25PsBMFqCajdnTINk51hdswmV9rGtG+3Q=";
};
dependencies = [ pydantic ];
@@ -15,13 +15,13 @@
buildHomeAssistantComponent rec {
owner = "amitfin";
domain = "oref_alert";
version = "6.20.1";
version = "6.20.2";
src = fetchFromGitHub {
owner = "amitfin";
repo = "oref_alert";
tag = "v${version}";
hash = "sha256-O4A4Aiddq4YzPx5g9akCepWjEeFdlwTWe5xkPtAmuYE=";
hash = "sha256-jDrSFIFlp9BVytIVUiW3lAKAmG6N0NYS0TaUxQC26eE=";
};
# Do not publish cards, currently broken, attempting to write to nix store.
@@ -8,13 +8,13 @@
buildHomeAssistantComponent (finalAttrs: {
owner = "geappliances";
domain = "smarthq";
version = "1.1.0";
version = "1.2.1";
src = fetchFromGitHub {
owner = "geappliances";
repo = "geappliances-smarthq-integration";
tag = "v${finalAttrs.version}";
hash = "sha256-LTLlkl4Mh0nSZfNVyLEItVPnQkM1nnDkPjsM98otp3w=";
hash = "sha256-8DAnALqtFuMfEXF4Kcu/RMmcK2LS7TLrvgrFP+Jwo/4=";
};
dependencies = [
@@ -10,13 +10,13 @@
buildHomeAssistantComponent rec {
owner = "frenck";
domain = "spook";
version = "4.0.1";
version = "5.0.0";
src = fetchFromGitHub {
inherit owner;
repo = domain;
tag = "v${version}";
hash = "sha256-0IihrhATgraGmuMRnrbGTUrtlXAR+CooENSIKSWIknY=";
hash = "sha256-tIVEI5oZcvI0uyCQfajb1WVldkx7aQF8gV0UBWYPUnI=";
};
patches = [ ./remove-sub-integration-symlink-hack.patch ];
@@ -1,17 +1,8 @@
diff --git a/custom_components/spook/__init__.py b/custom_components/spook/__init__.py
index 1abc79d..68d48d1 100644
index 4223fac..6891ee9 100644
--- a/custom_components/spook/__init__.py
+++ b/custom_components/spook/__init__.py
@@ -22,8 +22,6 @@ from .services import SpookServiceManager
from .util import (
async_forward_setup_entry,
async_setup_all_entity_ids_cache_invalidation,
- link_sub_integrations,
- unlink_sub_integrations,
)
if TYPE_CHECKING:
@@ -35,48 +33,6 @@ if TYPE_CHECKING:
@@ -33,49 +33,6 @@ if TYPE_CHECKING:
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up from a config entry."""
@@ -57,53 +48,12 @@ index 1abc79d..68d48d1 100644
- severity=ir.IssueSeverity.WARNING,
- translation_key="restart_required",
- )
-
# Forward async_setup_entry to ectoplasms
await async_forward_setup_entry(hass, entry)
@@ -131,4 +87,3 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
@@ -117,4 +74,3 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_remove_entry(hass: HomeAssistant, _: ConfigEntry) -> None:
"""Remove a config entry."""
- await hass.async_add_executor_job(unlink_sub_integrations, hass)
diff --git a/custom_components/spook/util.py b/custom_components/spook/util.py
index 6aea27c..1437913 100644
--- a/custom_components/spook/util.py
+++ b/custom_components/spook/util.py
@@ -284,37 +284,6 @@ async def async_forward_platform_entry_setups_to_ectoplasm(
)
-def link_sub_integrations(hass: HomeAssistant) -> bool:
- """Link Spook sub integrations."""
- LOGGER.debug("Linking up Spook sub integrations")
-
- changes = False
- for manifest in Path(__file__).parent.rglob("integrations/*/manifest.json"):
- LOGGER.debug("Linking Spook sub integration: %s", manifest.parent.name)
- dest = Path(hass.config.config_dir) / "custom_components" / manifest.parent.name
- if not dest.exists():
- src = (
- Path(hass.config.config_dir)
- / "custom_components"
- / DOMAIN
- / "integrations"
- / manifest.parent.name
- )
- dest.symlink_to(src)
- changes = True
- return changes
-
-
-def unlink_sub_integrations(hass: HomeAssistant) -> None:
- """Unlink Spook sub integrations."""
- LOGGER.debug("Unlinking Spook sub integrations")
- for manifest in Path(__file__).parent.rglob("integrations/*/manifest.json"):
- LOGGER.debug("Unlinking Spook sub integration: %s", manifest.parent.name)
- dest = Path(hass.config.config_dir) / "custom_components" / manifest.parent.name
- if dest.exists():
- dest.unlink()
-
-
@callback
def async_get_all_area_ids(hass: HomeAssistant) -> set[str]:
"""Return all area IDs, known to Home Assistant."""
@@ -10,20 +10,15 @@
buildHomeAssistantComponent rec {
owner = "AN3Orik";
domain = "systemair";
version = "1.0.25";
version = "1.0.26";
src = fetchFromGitHub {
inherit owner;
repo = "systemair";
tag = "v${version}";
hash = "sha256-K8Boix6muKsaNOpIw2WothjREbawHeKprHnW8RerxRg=";
hash = "sha256-tY/5gEjMCbrVwIyEsWWsB/ePju9+8wgbi23XLdCVKrA=";
};
postPatch = ''
substituteInPlace custom_components/systemair/manifest.json \
--replace-fail "pymodbus==" "pymodbus>="
'';
dependencies = [
pymodbus
async-timeout
@@ -8,13 +8,13 @@
buildHomeAssistantComponent rec {
owner = "marq24";
domain = "tibber_local";
version = "2026.6.1";
version = "2026.6.2";
src = fetchFromGitHub {
inherit owner;
repo = "ha-tibber-pulse-local";
tag = version;
hash = "sha256-HalEHJg3+6D+3TXVsfdlxL3HvSqXUcaSrW1owtRPff8=";
hash = "sha256-Mssjizh9DcA6fldwl6QmmgG8aOVwvF5d0akqrkArM5g=";
};
dependencies = [
@@ -11,13 +11,13 @@
buildHomeAssistantComponent rec {
owner = "make-all";
domain = "tuya_local";
version = "2026.6.2";
version = "2026.6.4";
src = fetchFromGitHub {
inherit owner;
repo = "tuya-local";
tag = version;
hash = "sha256-4897QCslPQ/5Rt1U6EcapUav7XMa65i+5aXbMyv9mxE=";
hash = "sha256-VJ2c8wegviirCT+hygg9LKPN5ZLqxfkQl6zayaXZRU0=";
};
dependencies = [
@@ -0,0 +1,37 @@
diff --git a/rollup.config.js b/rollup.config.js
index 9a8b5a17..cb0b7e62 100644
--- a/rollup.config.js
+++ b/rollup.config.js
@@ -1,4 +1,5 @@
import commonjs from '@rollup/plugin-commonjs';
+import fs from 'node:fs';
import image from '@rollup/plugin-image';
import json from '@rollup/plugin-json';
import { nodeResolve } from '@rollup/plugin-node-resolve';
@@ -27,11 +28,16 @@ const serveopts = {
},
};
+const hasDotGit = fs.existsSync('git');
+const gitInfoPlugin = hasDotGit
+ ? [gitInfo.default({ enableBuildDate: true, updateVersion: false })]
+ : [];
+
/**
* @type {import('rollup').RollupOptions['plugins']}
*/
const plugins = [
- gitInfo.default({ enableBuildDate: true, updateVersion: false }),
+ ...gitInfoPlugin,
styles({
modules: false,
// Behavior of inject mode, without actually injecting style
@@ -55,7 +61,7 @@ const plugins = [
inlineSources: dev,
exclude: ['dist/**', 'tests/**/*.test.ts'],
}),
- json({ exclude: 'package.json' }),
+ json({ exclude: hasDotGit ? 'package.json' : undefined }),
replace({
preventAssignment: true,
values: {
@@ -16,16 +16,23 @@ stdenv.mkDerivation (finalAttrs: {
owner = "dermotduffy";
repo = "advanced-camera-card";
tag = "v${finalAttrs.version}";
hash = "sha256-GHSyDdKGgPPMbcPIqlQbRA0V8gPd1YsId8gqPF0VgTs=";
leaveDotGit = true; # gitInfo plugin
hash = "sha256-NdWP2nYzDEzmO4DpwVUpn3/KsungKNOzOQf8FxZ4fGw=";
};
patches = [
# Remove after upstream updates to Yarn 4.14
# https://github.com/dermotduffy/advanced-camera-card/blob/main/package.json#L201
./yarn-4.14-support.patch
# Drop hard dependency on .git repo during build
./gitinfo.patch
];
postPatch = ''
substituteInPlace package.json \
--replace-fail "0.0.0-dev" "${finalAttrs.version}"
'';
missingHashes = ./missing-hashes.json;
offlineCache = yarn-berry_4.fetchYarnBerryDeps {
@@ -6,16 +6,16 @@
buildNpmPackage rec {
pname = "auto-entities";
version = "2.5.0";
version = "2.6.0";
src = fetchFromGitHub {
owner = "Lint-Free-Technology";
repo = "lovelace-auto-entities";
tag = "v${version}";
hash = "sha256-qKhxVLD4NbkCzpUNX5UkjEjLOMQ7ZvHHLVLTrcunTPQ=";
hash = "sha256-2lIeFtskvUq1ZrHinCXrv/VBtI06tZn7YwRAMvBm/uk=";
};
npmDepsHash = "sha256-Z+9Lp1AzrY2I+unpBxdbr9rkfcIe/dDblB3MDSd2D8w=";
npmDepsHash = "sha256-XZcb5gFRGiC4Xj97ExDtRFXWRHbyWEOIp7spUzoS9EA=";
installPhase = ''
runHook preInstall
@@ -6,13 +6,13 @@
buildNpmPackage rec {
pname = "bubble-card";
version = "3.2.3";
version = "3.2.4";
src = fetchFromGitHub {
owner = "Clooos";
repo = "Bubble-Card";
rev = "v${version}";
hash = "sha256-X6Oh+0VcVSvr2JydMqWVzYFonxdsewi0lrrFVXtb/BA=";
hash = "sha256-ofGIq6DLA2VQj5Gm/Dc+DZfwWZI3frAFzXO7MJDM610=";
};
npmDepsHash = "sha256-jyw8U99R7M3JJwu30ADefAitm4lWWVHEwq108gWZpfg=";
@@ -6,16 +6,16 @@
buildNpmPackage rec {
pname = "lovelace-card-mod";
version = "4.2.1";
version = "4.2.1-202604";
src = fetchFromGitHub {
owner = "thomasloven";
repo = "lovelace-card-mod";
rev = "v${version}";
hash = "sha256-16aA9VaSuWZ1i9UBGp9vb7N1H5vfcLOiqppjPoqphM0=";
hash = "sha256-56nGxdA1RTkXZpcuQ6LOuRtGoBjTQtH2jKCN3omZCN0=";
};
npmDepsHash = "sha256-tJsEGsVTmU1Hakumv9dsurwHpJ791wwRYpoAi2uAclA=";
npmDepsHash = "sha256-RZP3zWz7ZHob/QySF/6XTYOYuulGZUBQXG79fHHJfug=";
installPhase = ''
runHook preInstall
@@ -6,13 +6,13 @@
buildNpmPackage (finalAttrs: {
pname = "custom-brand-icons";
version = "2026.06.4";
version = "2026.07.0";
src = fetchFromGitHub {
owner = "elax46";
repo = "custom-brand-icons";
tag = finalAttrs.version;
hash = "sha256-9wipxsj4KcwgPDo6nanMrSpuDAMAAM72EQISkTOczbs=";
hash = "sha256-fmvWUt3Q+9ydvHB7t8z3/9mCLuF/llpoUo6e8K2rn/g=";
};
npmDepsHash = "sha256-ZTl9+vXEBR3pvksaLWof8y1WnoL2tAL3KuPzZn7VjjE=";
@@ -12,20 +12,20 @@ let
in
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "custom-sidebar";
version = "15.0.0";
version = "16.0.0";
src = fetchFromGitHub {
owner = "elchininet";
repo = "custom-sidebar";
tag = "v${finalAttrs.version}";
hash = "sha256-0bS760GfIO/LdQD6lNEKhiIW5lyCu35cTi0g3GaGQ5M=";
hash = "sha256-ST7wgxl9bpsHvguYbZQYYWO1KkinSrNCrbugVBJGvJo=";
};
pnpmDeps = fetchPnpmDeps {
inherit (finalAttrs) pname version src;
inherit pnpm;
fetcherVersion = 3;
hash = "sha256-zmWZhOx1Pl7O5T5vNdff/nZC1juwm66YOVIMjuNoBYg=";
hash = "sha256-SbjE9u2RZ8M6GHxk7NkvyihGDiO6v/1LHywvaP8OcQM=";
};
nativeBuildInputs = [
@@ -12,20 +12,20 @@ let
in
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "kiosk-mode";
version = "14.0.0";
version = "14.0.1";
src = fetchFromGitHub {
owner = "nemesisre";
repo = "kiosk-mode";
tag = "v${finalAttrs.version}";
hash = "sha256-FWSWG+tWRDGHDd9uvVmD8vGlHkJ9tf02S+8RWGAu+10=";
hash = "sha256-eQ2dYXmx4nnk/1bbTayPezPyghBo5UbNWf3USY20ePg=";
};
pnpmDeps = fetchPnpmDeps {
inherit (finalAttrs) pname version src;
inherit pnpm;
fetcherVersion = 3;
hash = "sha256-Ci1RENFsJwWBEUUSKbAvbRGTHn2rfIOXLsdGKamzRRE=";
hash = "sha256-bCtk+cqWnYvPo4VsvLaN+m0LIlP8jgb951aIf1emGZg=";
};
nativeBuildInputs = [

Some files were not shown because too many files have changed in this diff Show More