mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-11-06 04:39:57 +00:00
Compare commits
105 Commits
staging
...
wip-home-a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
228ea359b7 | ||
|
|
689aeb2c7f | ||
|
|
3e8fda257d | ||
|
|
35e04d7c5c | ||
|
|
691d681592 | ||
|
|
3d962eb0e3 | ||
|
|
634a3406c6 | ||
|
|
99b460b98e | ||
|
|
36150ddf7f | ||
|
|
b474814212 | ||
|
|
9f9c1502f0 | ||
|
|
b065059b65 | ||
|
|
25c39496dc | ||
|
|
7d0f1f2486 | ||
|
|
3f6b050bc0 | ||
|
|
f0ea40775d | ||
|
|
852202d260 | ||
|
|
a5570c0e39 | ||
|
|
d782e4113e | ||
|
|
e52df18ceb | ||
|
|
6662304351 | ||
|
|
cb480fb025 | ||
|
|
60c2e13461 | ||
|
|
a3391fcdb1 | ||
|
|
1b3384f1c6 | ||
|
|
25e4fb1af1 | ||
|
|
6a4518790e | ||
|
|
eba6b8f131 | ||
|
|
ab0e071bd3 | ||
|
|
c9c25a1635 | ||
|
|
77887a84b1 | ||
|
|
7279ffc7e9 | ||
|
|
ec3dbc1c6f | ||
|
|
9b08e597ff | ||
|
|
c0c3415f8e | ||
|
|
5bd5a8c119 | ||
|
|
a22f7be128 | ||
|
|
413a38166b | ||
|
|
6440e212ad | ||
|
|
4a8a71fd56 | ||
|
|
bc14350d6c | ||
|
|
08980e0d19 | ||
|
|
d5dd02ae2a | ||
|
|
170fb94027 | ||
|
|
087f089ee3 | ||
|
|
7e4384ce09 | ||
|
|
6826f325e0 | ||
|
|
0d44ff93d2 | ||
|
|
ec675fd4af | ||
|
|
d43860e82a | ||
|
|
939f186092 | ||
|
|
82b4909397 | ||
|
|
4c51767185 | ||
|
|
da4aec48d4 | ||
|
|
7e88079bf1 | ||
|
|
870b740a62 | ||
|
|
5d06be5882 | ||
|
|
139c436911 | ||
|
|
aee6495be4 | ||
|
|
93026ca148 | ||
|
|
7bbd8448fd | ||
|
|
6c63ab6361 | ||
|
|
74bc505c89 | ||
|
|
b0d8b90afa | ||
|
|
be0b8eeea4 | ||
|
|
34cbd5db71 | ||
|
|
d9f6099f00 | ||
|
|
89a6f8bcea | ||
|
|
27cc15aa41 | ||
|
|
4586a923b4 | ||
|
|
c1b9de92f4 | ||
|
|
506c3d1919 | ||
|
|
408b6df3fe | ||
|
|
c5f871b7a4 | ||
|
|
5e3ade06c8 | ||
|
|
6594430c39 | ||
|
|
64c201c5a2 | ||
|
|
049afbe0c4 | ||
|
|
8cf4081821 | ||
|
|
822d66fa12 | ||
|
|
0ff303dcbd | ||
|
|
fe2924e4ee | ||
|
|
42f6028dfc | ||
|
|
91cd96eccf | ||
|
|
ce4d203035 | ||
|
|
a9d752ed44 | ||
|
|
37a7954078 | ||
|
|
024657ac8a | ||
|
|
c31a21ce5d | ||
|
|
854c89a11f | ||
|
|
ccde5003f5 | ||
|
|
00003f846b | ||
|
|
2d6d296990 | ||
|
|
0000ed33dc | ||
|
|
945a9c3a09 | ||
|
|
11afad1674 | ||
|
|
07930db219 | ||
|
|
ae03ee2b31 | ||
|
|
ec76939f5d | ||
|
|
4ad7e95ee8 | ||
|
|
90e1340f3d | ||
|
|
c69275fdec | ||
|
|
e3c1d1a231 | ||
|
|
e397ed06d7 | ||
|
|
0684e96b7a |
@@ -1,45 +1,77 @@
|
||||
{
|
||||
lib,
|
||||
aiohttp,
|
||||
aresponses,
|
||||
aiointercept,
|
||||
awesomeversion,
|
||||
buildPythonPackage,
|
||||
click,
|
||||
fetchFromGitHub,
|
||||
mashumaro,
|
||||
orjson,
|
||||
poetry-core,
|
||||
pyprojectVersionPatchHook,
|
||||
pytest-asyncio,
|
||||
pytest-cov-stub,
|
||||
pytestCheckHook,
|
||||
rich,
|
||||
syrupy,
|
||||
typer,
|
||||
yarl,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "adguardhome";
|
||||
version = "0.8.1";
|
||||
version = "1.0.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "frenck";
|
||||
repo = "python-adguardhome";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-pc7UfR/0mQZ98FyomQErz5hePHy6KE2h9UhJ9lFGtFA=";
|
||||
hash = "sha256-UpRr1HTh7BMNWL4ml6pWe+AsIy4MEgTpa4HgdzH36oQ=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# https://github.com/frenck/python-adguardhome/pull/1870
|
||||
./typer-0.26.patch
|
||||
];
|
||||
|
||||
build-system = [ poetry-core ];
|
||||
|
||||
nativeBuildInputs = [ pyprojectVersionPatchHook ];
|
||||
|
||||
dependencies = [
|
||||
aiohttp
|
||||
awesomeversion
|
||||
mashumaro
|
||||
orjson
|
||||
yarl
|
||||
];
|
||||
|
||||
optional-dependencies = {
|
||||
cli = [
|
||||
rich
|
||||
typer
|
||||
];
|
||||
};
|
||||
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
||||
nativeCheckInputs = [
|
||||
aresponses
|
||||
aiointercept
|
||||
pytest-asyncio
|
||||
pytest-cov-stub
|
||||
pytestCheckHook
|
||||
syrupy
|
||||
]
|
||||
++ finalAttrs.passthru.optional-dependencies.cli;
|
||||
|
||||
disabledTests = [
|
||||
# fixture formatting differs
|
||||
"test_config"
|
||||
"test_get"
|
||||
"test_stats"
|
||||
"test_status"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "adguardhome" ];
|
||||
|
||||
40
pkgs/development/python-modules/adguardhome/typer-0.26.patch
Normal file
40
pkgs/development/python-modules/adguardhome/typer-0.26.patch
Normal file
@@ -0,0 +1,40 @@
|
||||
commit 22a786da1047189825233c293dd5fc2a129fd8ea
|
||||
Author: Sandro Jäckel <sandro.jaeckel@gmail.com>
|
||||
Date: Thu, 5 Nov 2026 20:02:33 +0100
|
||||
|
||||
Fix CLI structure test with typer 0.26
|
||||
|
||||
diff --git a/tests/cli/test_cli.py b/tests/cli/test_cli.py
|
||||
index 74d842f..9264105 100644
|
||||
--- a/tests/cli/test_cli.py
|
||||
+++ b/tests/cli/test_cli.py
|
||||
@@ -10,9 +10,10 @@
|
||||
from typing import TYPE_CHECKING
|
||||
from unittest.mock import AsyncMock, MagicMock
|
||||
|
||||
-import click
|
||||
import pytest
|
||||
from awesomeversion import AwesomeVersion
|
||||
+from typer import BadParameter
|
||||
+from typer.core import TyperGroup
|
||||
from typer.main import get_command
|
||||
from typer.testing import CliRunner
|
||||
|
||||
@@ -80,7 +81,7 @@ def client(monkeypatch: pytest.MonkeyPatch) -> AsyncMock:
|
||||
def test_cli_structure(snapshot: SnapshotAssertion) -> None:
|
||||
"""Test the commands and their parameters stay as they are."""
|
||||
command = get_command(cli)
|
||||
- assert isinstance(command, click.Group)
|
||||
+ assert isinstance(command, TyperGroup)
|
||||
|
||||
structure = {
|
||||
name: sorted(param.name for param in sub.params if param.name)
|
||||
@@ -279,7 +280,7 @@ def test_parse_duration(value: str, expected: timedelta) -> None:
|
||||
)
|
||||
def test_parse_duration_invalid(value: str, message: str) -> None:
|
||||
"""Test values that are not a positive duration are rejected."""
|
||||
- with pytest.raises(click.BadParameter, match=message):
|
||||
+ with pytest.raises(BadParameter, match=message):
|
||||
parse_duration(value)
|
||||
|
||||
|
||||
@@ -1,33 +1,40 @@
|
||||
{
|
||||
buildPythonPackage,
|
||||
click,
|
||||
fetchFromGitHub,
|
||||
lib,
|
||||
poetry-core,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
pyprojectVersionPatchHook,
|
||||
pytest-asyncio,
|
||||
pytestCheckHook,
|
||||
uv-build,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "aio-ownet";
|
||||
version = "0.0.5";
|
||||
version = "0.1.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "hacf-fr";
|
||||
repo = "aio-ownet";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-KgQasltfoffVjCDX9s98qnZrv+VLiEffLi9FnUD5vXc=";
|
||||
hash = "sha256-+RIfCtLQu2OBBlj5Lcd7/iiXMuSlvJq3EcXBaXw4T1I=";
|
||||
};
|
||||
|
||||
build-system = [ poetry-core ];
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "uv_build>=0.12.21,<0.13" "uv_build"
|
||||
'';
|
||||
|
||||
optional-dependencies = {
|
||||
cli = [ click ];
|
||||
};
|
||||
nativeBuildInputs = [
|
||||
pyprojectVersionPatchHook
|
||||
];
|
||||
|
||||
build-system = [ uv-build ];
|
||||
|
||||
pythonImportsCheck = [ "aio_ownet" ];
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytest-asyncio
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "aio-wattwaechter";
|
||||
version = "1.1.0";
|
||||
version = "1.3.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "SmartCircuits-GmbH";
|
||||
repo = "WattWaechter-PyPI";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-hM2DGQBEUr1HYd0CDdjRdFA7+HKaF2kLVFrAWCjP+CU=";
|
||||
hash = "sha256-jpLyBjgjtqFn9BNNOXs7cR4uk6y174HKjulYFf0sDj4=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
aiohttp,
|
||||
anyio,
|
||||
beautifulsoup4,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
@@ -15,20 +16,29 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "aioamazondevices";
|
||||
version = "16.3.2";
|
||||
version = "17.2.4";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "chemelli74";
|
||||
repo = "aioamazondevices";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-2ToEnoaOJvbW/34DsndV2w8qZAfRX0a4tRh5B5k/PNQ=";
|
||||
hash = "sha256-i2FPhbgy19ixaPEjDm8nCQlQaB2uauZNmA95fb4jPEM=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "setuptools>=84.2.1" "setuptools"
|
||||
'';
|
||||
|
||||
# all deps are needlessly pinned to very recent versions
|
||||
pythonRelaxDeps = true;
|
||||
|
||||
build-system = [ poetry-core ];
|
||||
|
||||
dependencies = [
|
||||
aiohttp
|
||||
anyio
|
||||
beautifulsoup4
|
||||
httpx
|
||||
langcodes
|
||||
|
||||
@@ -29,16 +29,21 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "aioesphomeapi";
|
||||
version = "46.23.0"; # must track the major version that home-assistant pins
|
||||
version = "46.27.0"; # must track the major version that home-assistant pins
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "esphome";
|
||||
repo = "aioesphomeapi";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-7n6K+MY0s2oOvnbUXrZA/PCamfpel1jYZr4RXzH+Y6s=";
|
||||
hash = "sha256-IRV6yZqP56+3JiY84BQHFsuyj+gOO9gCOvj63uzo+IE=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail 'setuptools>=84.2.0' setuptools
|
||||
'';
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
cython
|
||||
|
||||
@@ -17,19 +17,19 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "aiohasupervisor";
|
||||
version = "0.6.0";
|
||||
version = "0.8.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "home-assistant-libs";
|
||||
repo = "python-supervisor-client";
|
||||
tag = version;
|
||||
hash = "sha256-OAuLee6hbShgEDN/3oD7O6KzxylnfrJoCgMPjluYcG8=";
|
||||
hash = "sha256-i6OyDuC+463DbMmTskrXp24ecftRwrQycsQEh9nRmpo=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "setuptools>=68.0,<83.1" "setuptools"
|
||||
--replace-fail "setuptools>=68.0,<84.1" "setuptools"
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -18,14 +18,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "aiomealie";
|
||||
version = "2.1.2";
|
||||
version = "2.1.3";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "joostlek";
|
||||
repo = "python-mealie";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-F9gl+OdTQe6VxZPvFyo8r5GRxO3Ug4juvqje86djFNw=";
|
||||
hash = "sha256-yf/16+Yi7Wvafl9mH5ah6SYbMtrhIXsn/4ajyjidR+M=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "aiopowerwall";
|
||||
version = "0.4.1";
|
||||
version = "0.10.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Teslemetry";
|
||||
repo = "aiopowerwall";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-I1TdmsMgCGzBMAnx+QUTHB4UmxunmYnf+VS11kPrc8o=";
|
||||
hash = "sha256-be6q7Wn8OMHMPkNJSR/E4Ah0j4Clz9dj1YG4irpLqW8=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
|
||||
@@ -18,14 +18,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "aioshelly";
|
||||
version = "13.35.0";
|
||||
version = "14.0.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "home-assistant-libs";
|
||||
repo = "aioshelly";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-MBoRglq1Osz9you7pfeHNbYP1MLO6D2luiShc5dQhsI=";
|
||||
hash = "sha256-ZJrHyyYyUycr3R2CgUc/I7GmnnkzIuJBy4x0I/OUP6A=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -1,40 +1,44 @@
|
||||
{
|
||||
lib,
|
||||
aiohttp,
|
||||
async-timeout,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
pillow,
|
||||
pyprojectVersionPatchHook,
|
||||
pytest-asyncio,
|
||||
pytest-cov-stub,
|
||||
pytestCheckHook,
|
||||
setuptools,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "aioslimproto";
|
||||
version = "3.2.3";
|
||||
version = "3.3.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "home-assistant-libs";
|
||||
repo = "aioslimproto";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-TSoVQ1AwJSWAwMKfxZC/9lWyCiMo9Fvq9L0fuyUmAMY=";
|
||||
hash = "sha256-98GLhv60SaPQIi8OEWTVPz+3TT2rBRuXUKfF/8TG/nU=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail 'version = "0.0.0"' 'version = "${finalAttrs.version}"'
|
||||
'';
|
||||
nativeBuildInputs = [
|
||||
pyprojectVersionPatchHook
|
||||
];
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
aiohttp
|
||||
async-timeout
|
||||
pillow
|
||||
];
|
||||
|
||||
# Module has no tests
|
||||
doCheck = false;
|
||||
nativeCheckInputs = [
|
||||
pytest-asyncio
|
||||
pytest-cov-stub
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "aioslimproto" ];
|
||||
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "aiospinel";
|
||||
version = "1.2.0";
|
||||
version = "1.3.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "home-assistant-libs";
|
||||
repo = "aiospinel";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-AMIrm9AGFjRSDwJtDXcOH9HIBFiqszjjNma+egRa5Tw=";
|
||||
hash = "sha256-l3RHQVpKJwMRRcC3+NUS650lEv1+gnLfrxjkeToa/I0=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
|
||||
@@ -4,25 +4,22 @@
|
||||
fetchFromGitHub,
|
||||
flit-core,
|
||||
pytestCheckHook,
|
||||
typing-extensions,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "aiosqlite";
|
||||
version = "0.21.0";
|
||||
version = "0.22.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "omnilib";
|
||||
repo = "aiosqlite";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-3l/uR97WuLlkAEdogL9iYoXp89bsAcpH6XEtMELsX9o=";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-voOOFo1OwaRQ3JsDHlBrngP+8ajf0kTNKXJyOaJiTs4=";
|
||||
};
|
||||
|
||||
build-system = [ flit-core ];
|
||||
|
||||
dependencies = [ typing-extensions ];
|
||||
|
||||
nativeCheckInputs = [ pytestCheckHook ];
|
||||
|
||||
# Tests are not pick-up automatically by the hook
|
||||
@@ -33,8 +30,8 @@ buildPythonPackage rec {
|
||||
meta = {
|
||||
description = "Asyncio bridge to the standard sqlite3 module";
|
||||
homepage = "https://github.com/jreese/aiosqlite";
|
||||
changelog = "https://github.com/omnilib/aiosqlite/blob/${src.tag}/CHANGELOG.md";
|
||||
changelog = "https://github.com/omnilib/aiosqlite/blob/${finalAttrs.src.tag}/CHANGELOG.md";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
pytest-mockservers,
|
||||
pytest-resource-path,
|
||||
pytestCheckHook,
|
||||
pythonAtLeast,
|
||||
pytz,
|
||||
time-machine,
|
||||
}:
|
||||
@@ -60,15 +59,6 @@ buildPythonPackage (finalAttrs: {
|
||||
"test_schedule_parser_with_a_daily_recurring_enabled_schedule_data"
|
||||
"test_schedule_parser_with_a_partial_daily_recurring_enabled_schedule_data"
|
||||
"test_schedule_parser_with_a_non_recurring_enabled_schedule_data"
|
||||
]
|
||||
++ lib.optionals (pythonAtLeast "3.12") [
|
||||
# AssertionError: Expected <'I' format requires 0 <= number <= 4294967295> to be equal to <argument out of range>, but was not.
|
||||
"test_minutes_to_hexadecimal_seconds_with_a_negative_value_should_throw_an_error"
|
||||
"test_current_timestamp_to_hexadecimal_with_errornous_value_should_throw_an_error"
|
||||
]
|
||||
++ lib.optionals (pythonAtLeast "3.14") [
|
||||
# AssertionError: Expected <hour must be in 0..23, not -1> to be equal
|
||||
"test_seconds_to_iso_time_with_a_nagative_value_should_throw_an_error"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "aioswitcher" ];
|
||||
|
||||
@@ -11,23 +11,26 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "aiotractive";
|
||||
version = "1.2.0";
|
||||
version = "2.0.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "zhulik";
|
||||
repo = "aiotractive";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-OoJwKzJK9pAW+hgZMVJayeJ36T7clojIifijvmUExqs=";
|
||||
hash = "sha256-mYf8WoY2GNaVuLnDMYhbLK4h1CUvZsKKegiM0hXfWtQ=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
nativeBuildInputs = [
|
||||
pyprojectVersionPatchHook
|
||||
];
|
||||
|
||||
pythonRelaxDeps = [ "orjson" ];
|
||||
pythonRelaxDeps = [
|
||||
"aiohttp"
|
||||
"orjson"
|
||||
];
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
aiohttp
|
||||
|
||||
@@ -15,22 +15,29 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "aiovodafone";
|
||||
version = "3.3.5";
|
||||
version = "3.3.11";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "chemelli74";
|
||||
repo = "aiovodafone";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-AOE4fM+RH3Ls7p2QPdLLq78b5hnxvmqBfib8u/gykfA=";
|
||||
hash = "sha256-k8DaYuff0rZYVLppVagPphUu/WCoza0IOSp+uoD5oCI=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "setuptools>=84.2.1" "setuptools"
|
||||
'';
|
||||
|
||||
# all deps are needlessly pinned to very recent versions
|
||||
pythonRelaxDeps = true;
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
aiohttp
|
||||
beautifulsoup4
|
||||
cryptography
|
||||
orjson
|
||||
pycryptodome
|
||||
segno
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "aiowebostv";
|
||||
version = "0.10.0";
|
||||
version = "1.0.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "home-assistant-libs";
|
||||
repo = "aiowebostv";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-LtQkuAoqC6ELlcz56m0J+v8IuGGJn9SAoQsUNoL76m0=";
|
||||
hash = "sha256-tNFqpTbE+jQ63ofJlQoiPBy61dFybDaYsHMa+ysyxnY=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -17,14 +17,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "airgradient";
|
||||
version = "0.10.0";
|
||||
version = "0.11.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "airgradienthq";
|
||||
repo = "python-airgradient";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-OlCCImVvoDqOA/LiSShCXwQACHw5Hmwc10BXaMz1DD8=";
|
||||
hash = "sha256-3W4Uf/PXB6Lk3lOFKB/sU4vDC7OPxU0SbWkFIIEMCYg=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pyprojectVersionPatchHook ];
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "azure-servicebus";
|
||||
version = "7.14.3";
|
||||
version = "7.15.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchPypi {
|
||||
pname = "azure_servicebus";
|
||||
inherit version;
|
||||
hash = "sha256-cKYzhFV67AvucndA57Jd7Snp5wG3dhF2RXf9dAI4lAI=";
|
||||
hash = "sha256-Ysc/PZ77rwCJo3Wtxe+ZL/5tfQsSGLhGImWqMK01LD4=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
pytest-asyncio,
|
||||
pytest-timeout,
|
||||
pytestCheckHook,
|
||||
serialx,
|
||||
setuptools,
|
||||
voluptuous,
|
||||
zigpy,
|
||||
@@ -14,14 +15,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "bellows";
|
||||
version = "1.1.0";
|
||||
version = "1.2.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "zigpy";
|
||||
repo = "bellows";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-Qozk8DraiFcKYtI5bh0/6wa+sbAF3dgnGmP1pIE+9H0=";
|
||||
hash = "sha256-5Ysj5mHoUdlSapYwW07qqsLH7svYCtUb9tNzHzi/KB8=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -35,6 +36,7 @@ buildPythonPackage (finalAttrs: {
|
||||
dependencies = [
|
||||
click
|
||||
click-log
|
||||
serialx
|
||||
voluptuous
|
||||
zigpy
|
||||
];
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "besen";
|
||||
version = "0.4.7";
|
||||
version = "0.6.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "moryoav";
|
||||
repo = "besen";
|
||||
tag = "library-v${finalAttrs.version}";
|
||||
hash = "sha256-qXvp0tP+KoSdm+Hbq+TAFodvEJK8M0x1YrZiMYv5CPY=";
|
||||
repo = "py-besen";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-wj525BEtN/1nG7hKzGBQB1v+npgPg4FSTPvWNMN5mFw=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
@@ -29,19 +29,12 @@ buildPythonPackage (finalAttrs: {
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
preCheck = ''
|
||||
# specific to the custom component tests
|
||||
rm tests/conftest.py
|
||||
'';
|
||||
|
||||
enabledTestPaths = [ "tests/library" ];
|
||||
|
||||
pythonImportsCheck = [ "besen" ];
|
||||
|
||||
meta = {
|
||||
description = "Async Python client for Besen EV chargers over BLE";
|
||||
homepage = "https://github.com/moryoav/besen";
|
||||
changelog = "https://github.com/moryoav/besen/releases/tag/${finalAttrs.src.tag}";
|
||||
homepage = "https://github.com/moryoav/py-besen";
|
||||
changelog = "https://github.com/moryoav/py-besen/releases/tag/${finalAttrs.src.tag}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.jamiemagee ];
|
||||
};
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "chefiq-ble";
|
||||
version = "1.0.1";
|
||||
version = "1.1.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Invader444";
|
||||
repo = "chefiq-ble";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-aC0v3KtZEnEz90kJPxx0euUM/h6NzLnvI9WggImYQ5c=";
|
||||
hash = "sha256-4zxEUtcsi91lgRU6WFnPMaGR5hjUWHXZyInP3MIoqEo=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
{
|
||||
lib,
|
||||
aiohttp,
|
||||
aresponses,
|
||||
aioresponses,
|
||||
awesomeversion,
|
||||
backoff,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
mashumaro,
|
||||
@@ -13,19 +12,20 @@
|
||||
pytest-cov-stub,
|
||||
pytestCheckHook,
|
||||
syrupy,
|
||||
tenacity,
|
||||
yarl,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "demetriek";
|
||||
version = "1.4.1";
|
||||
version = "2.1.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "frenck";
|
||||
repo = "python-demetriek";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-dd6BoaUUz84nf3g3v4E78t0mDC+ZhXKe0ld2gCNurZs=";
|
||||
hash = "sha256-35hMOrpyINXOsPA09XnCNOwURLD5dIdhiYSJZDYCWJE=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -39,14 +39,14 @@ buildPythonPackage rec {
|
||||
dependencies = [
|
||||
aiohttp
|
||||
awesomeversion
|
||||
backoff
|
||||
mashumaro
|
||||
orjson
|
||||
tenacity
|
||||
yarl
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
aresponses
|
||||
aioresponses
|
||||
pytest-asyncio
|
||||
pytest-cov-stub
|
||||
pytestCheckHook
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "eurotronic-cometblue-ha";
|
||||
version = "1.4.0";
|
||||
version = "2.0.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "rikroe";
|
||||
repo = "eurotronic-cometblue";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-j3UuN0Cmb2mOo3QGqy0wu19+vRyMahclXKyka2Vy10w=";
|
||||
hash = "sha256-9tWrogfv6veRRokrOs017yDnmVoAb5mt5M9yY6QJhrc=";
|
||||
};
|
||||
|
||||
build-system = [ pdm-backend ];
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
lib,
|
||||
aiofiles,
|
||||
aiohttp,
|
||||
aioresponses,
|
||||
aiozoneinfo,
|
||||
asyncclick,
|
||||
buildPythonPackage,
|
||||
@@ -11,26 +10,28 @@
|
||||
hatchling,
|
||||
hatch-vcs,
|
||||
keyring,
|
||||
probatio,
|
||||
pytest-asyncio,
|
||||
pytest-freezer,
|
||||
pytestCheckHook,
|
||||
pyyaml,
|
||||
syrupy,
|
||||
voluptuous,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "evohome-async";
|
||||
version = "2.1.0";
|
||||
version = "3.1.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "zxdavb";
|
||||
repo = "evohome-async";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-1wWUYhDj8lO8q8YF251z9uQDQTozTf5kIUjrNLrNdQA=";
|
||||
hash = "sha256-NoaW5wSOdYcWXPuK/mqSwaVoeh8N0uyNw08ih/729WM=";
|
||||
};
|
||||
|
||||
pythonRelaxDeps = [ "aiohttp" ];
|
||||
|
||||
build-system = [
|
||||
hatchling
|
||||
hatch-vcs
|
||||
@@ -39,7 +40,7 @@ buildPythonPackage (finalAttrs: {
|
||||
dependencies = [
|
||||
aiohttp
|
||||
aiozoneinfo
|
||||
voluptuous
|
||||
probatio
|
||||
];
|
||||
|
||||
optional-dependencies = {
|
||||
@@ -52,7 +53,6 @@ buildPythonPackage (finalAttrs: {
|
||||
};
|
||||
|
||||
nativeCheckInputs = [
|
||||
aioresponses
|
||||
pytest-asyncio
|
||||
pytest-freezer
|
||||
pytestCheckHook
|
||||
|
||||
@@ -3,29 +3,28 @@
|
||||
stdenv,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
poetry-core,
|
||||
pytestCheckHook,
|
||||
uv-build,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "govee-local-api";
|
||||
version = "3.1.0";
|
||||
version = "3.3.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Galorhallen";
|
||||
repo = "govee-local-api";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-0MrT99GbtBrYkKxathl51YvaKnyflNQgwnp8JP1zrRc=";
|
||||
hash = "sha256-JjrO9lOIrkp595+O6usa8wVrKmWyoywHEeIOP5HxL0Q=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
# dont depend on poetry at runtime
|
||||
# https://github.com/Galorhallen/govee-local-api/pull/75/files#r1943826599
|
||||
sed -i '/poetry = "^1.8.5"/d' pyproject.toml
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "uv_build>=0.11.30,<0.12" "uv_build"
|
||||
'';
|
||||
|
||||
build-system = [ poetry-core ];
|
||||
build-system = [ uv-build ];
|
||||
|
||||
nativeCheckInputs = [ pytestCheckHook ];
|
||||
|
||||
|
||||
@@ -2,33 +2,37 @@
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
netifaces,
|
||||
gitMinimal,
|
||||
ifaddr,
|
||||
pycryptodome,
|
||||
pytest-asyncio,
|
||||
pytestCheckHook,
|
||||
setuptools,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "greeclimate";
|
||||
version = "3.2.0";
|
||||
version = "3.5.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cmroche";
|
||||
repo = "greeclimate";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-lDsMx08BDaUZwmT9afwj9SOMovOftNOlfNV5btSAW8E=";
|
||||
hash = "sha256-qtdMEN4zMAA28/Co+T9HDu7OuRjTMdTRXJnWPiwuTSY=";
|
||||
};
|
||||
|
||||
pythonRelaxDeps = [ "pycryptodome" ];
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
netifaces
|
||||
ifaddr
|
||||
pycryptodome
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
gitMinimal
|
||||
pytest-asyncio
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "hass-nabucasa";
|
||||
version = "2.7.0";
|
||||
version = "2.8.1";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.14";
|
||||
@@ -40,7 +40,7 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "nabucasa";
|
||||
repo = "hass-nabucasa";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-neW9v4o0Au9+AYmfzDoGXHOLMvHzQcloinmaZ7O98HY=";
|
||||
hash = "sha256-awOFbUu2Rh/Fy6BPvUGAt2/+7UodPp0mPwNozWjw9cA=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "infrared-protocols";
|
||||
version = "10.2.0";
|
||||
version = "10.5.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "home-assistant-libs";
|
||||
repo = "infrared-protocols";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-WYSITY08808zxMmO6FWuWSxtyQ0V+eISbLfyd5D7UjE=";
|
||||
hash = "sha256-DLs+jqQWZ3wsp+DZQLBWSBgGR4iljijKtpPK5tSExoo=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "knx-frontend";
|
||||
version = "2026.10.5.160528";
|
||||
version = "2026.11.2.195507";
|
||||
pyproject = true;
|
||||
|
||||
# TODO: source build, uses yarn.lock
|
||||
src = fetchPypi {
|
||||
pname = "knx_frontend";
|
||||
inherit (finalAttrs) version;
|
||||
hash = "sha256-q1k8t9PzAvhqKmk7T0Lk/UMLkjxo4fLI22B2EsLhXIA=";
|
||||
hash = "sha256-LuxY3a2Bdb/due5Ss7M9Pl314cDLJfN5UaIQsUHTFiM=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -1,22 +1,24 @@
|
||||
{
|
||||
lib,
|
||||
aiohttp,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
lib,
|
||||
pytestCheckHook,
|
||||
hatchling,
|
||||
pytest-asyncio,
|
||||
pytestCheckHook,
|
||||
syrupy,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "librehardwaremonitor-api";
|
||||
version = "1.11.1";
|
||||
version = "1.12.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Sab44";
|
||||
repo = "librehardwaremonitor-api";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-GAJgLrfYhkdafk0DSgcNgXQ2vjtBf/kOEkkRw7i9rlE=";
|
||||
hash = "sha256-KwQjE+B7RJxk7AR2NmOic2qvQjrHHzUmNNRh72HS1VY=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
@@ -28,7 +30,9 @@ buildPythonPackage rec {
|
||||
pythonImportsCheck = [ "librehardwaremonitor_api" ];
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytest-asyncio
|
||||
pytestCheckHook
|
||||
syrupy
|
||||
];
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "lifx-async";
|
||||
version = "7.8.1";
|
||||
version = "7.13.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Djelibeybi";
|
||||
repo = "lifx-async";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-GZZy58gRrR+D8plarDibdYyzBq68tz50RMRW/d9Pxm0=";
|
||||
hash = "sha256-eK1raoy/LqmrzcejElnaCyv6Wf248oZ8/z+dDiPUYiQ=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
|
||||
@@ -14,14 +14,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "lifx-emulator-core";
|
||||
version = "3.12.7";
|
||||
version = "3.15.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Djelibeybi";
|
||||
repo = "lifx-emulator";
|
||||
tag = "core-v${finalAttrs.version}";
|
||||
hash = "sha256-Asb/n37gU1RqinqtVvbOAu4GHZmEbkkdzg2DmyFuHLo=";
|
||||
hash = "sha256-hAVFssX6rTTW99C0v/C3WBOZq5xkhAq0MEGIZwwH4bk=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/packages/lifx-emulator-core";
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "lunatone-rest-api-client";
|
||||
version = "0.10.3";
|
||||
version = "0.11.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "lunatone-public";
|
||||
repo = "lunatone-rest-api-client";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-3yb1D3MTYKyL2EjzRqKTNhVCaYqzkxrj9Lfy9FFTdaw=";
|
||||
hash = "sha256-O2/QNmPGewlQpPirO8ulUHf4BilNAEG3+wgOQ7hKVmk=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
|
||||
@@ -16,37 +16,38 @@
|
||||
pytest-vcr,
|
||||
requests-mock,
|
||||
setuptools,
|
||||
websocket-client,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "mastodon-py";
|
||||
version = "2.2.2";
|
||||
version = "2.3.3";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "halcy";
|
||||
repo = "Mastodon.py";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-/1oOouJjCCBCymfl9ps3eMDs099cqRY5f4j2jMKKBfE=";
|
||||
hash = "sha256-c0AHqqb9nBKKccoEPx/jsUm4szGP/CEdBYQbFEAdEF4=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
blurhash
|
||||
decorator
|
||||
python-dateutil
|
||||
python-magic
|
||||
requests
|
||||
];
|
||||
|
||||
optional-dependencies = {
|
||||
blurhash = [ blurhash ];
|
||||
grapheme = [ graphemeu ];
|
||||
magic = [ python-magic ];
|
||||
webpush = [
|
||||
http-ece
|
||||
cryptography
|
||||
];
|
||||
websocket_streaming = [ websocket-client ];
|
||||
};
|
||||
|
||||
nativeCheckInputs = [
|
||||
|
||||
@@ -19,14 +19,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "matter-python-client";
|
||||
version = "1.4.0";
|
||||
version = "1.5.5";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "matter-js";
|
||||
repo = "matterjs-server";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-eJSDTg00H/G2pPdVC23HiLLjPA8n1vCpqpAZgtUXl78=";
|
||||
hash = "sha256-A5TjsRVtIXzaFOYzy1kR0Rbdh41HqXmayM17Dg1c8eA=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/python_client";
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "mcstatus";
|
||||
version = "14.1.0";
|
||||
version = "14.2.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "py-mine";
|
||||
repo = "mcstatus";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-dcN9Uj/f482ui90RDcWgjdEawkfLWpxR2O69ZxPEq40=";
|
||||
hash = "sha256-9bblcg/uMqx0Qd1mIV9+Fb+xt0st7v4KrEquGNvRnfc=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
|
||||
@@ -13,21 +13,27 @@
|
||||
platformdirs,
|
||||
typing-extensions,
|
||||
pytest-asyncio,
|
||||
pytest-cov-stub,
|
||||
pytestCheckHook,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "midea-local";
|
||||
version = "12.2.0";
|
||||
version = "15.0.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "midea-lan";
|
||||
repo = "midea-local";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-zaEVje2/whWj8PtKNO1WnpKkTdfwG+wor2raNrlAc4w=";
|
||||
hash = "sha256-I192LNuG2Efxdv4JwN2bLqmSm4E5M0q4ksMwC3t3bvk=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "setuptools>=84.2.1" "setuptools"
|
||||
'';
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
@@ -44,6 +50,7 @@ buildPythonPackage (finalAttrs: {
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytest-asyncio
|
||||
pytest-cov-stub
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "modbus-connection";
|
||||
version = "4.12.4";
|
||||
version = "4.12.7";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
@@ -21,7 +21,7 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "home-assistant-libs";
|
||||
repo = "modbus-connection";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-CeZKkAsQv0WrJGNBFS6mZTVCmtx6ldvCwWC1sT+i4F4=";
|
||||
hash = "sha256-J/E5r9dQuHzW9gumemyPyyaLBDghftYRuxGNVFJ7aqA=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "music-assistant-client";
|
||||
version = "1.5.1";
|
||||
version = "1.6.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "music-assistant";
|
||||
repo = "client";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-8EsLeRtPH/YZyl8uKyzA1L5n+6lkGAFqYipVbaW4sSg=";
|
||||
hash = "sha256-BPFx8/G4XfzuOLmssMMhVppmPgKFrdI/R6OKneoToT4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pyprojectVersionPatchHook ];
|
||||
|
||||
@@ -25,14 +25,14 @@ buildPythonPackage (finalAttrs: {
|
||||
pname = "music-assistant-models";
|
||||
# Must be compatible with music-assistant-client package
|
||||
# nixpkgs-update: no auto update
|
||||
version = "1.1.189";
|
||||
version = "1.1.214";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "music-assistant";
|
||||
repo = "models";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-oB2ifUUysaJU/nUyTip0C06QujoFSjgowctadIHxDiQ=";
|
||||
hash = "sha256-Xs0p6ioIFNFOOHSGOWVB7TBa2MY/U6LvJbejD+Z1EF4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pyprojectVersionPatchHook ];
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "my-pv";
|
||||
version = "0.0.13";
|
||||
version = "0.0.16";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.14";
|
||||
@@ -21,9 +21,18 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "my-PV";
|
||||
repo = "py-mypv";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-qzVm5L9C5dlaZA45kbrEGxWGDqFmM5HljU3b+YDk7C0=";
|
||||
hash = "sha256-dwnklWA18a+oboOVrDHaQiU52wHxOfjxVlbQpmMJ0Cc=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "hatchling>=1.32.4" "hatchling"
|
||||
'';
|
||||
|
||||
pythonRelaxDeps = [
|
||||
"aiohttp"
|
||||
];
|
||||
|
||||
build-system = [
|
||||
hatch-vcs
|
||||
hatchling
|
||||
|
||||
@@ -16,14 +16,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "nextdns";
|
||||
version = "5.1.0";
|
||||
version = "5.2.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bieniu";
|
||||
repo = "nextdns";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-+ih7QHmtQmWsi6HZZ3xepYBDYlCOyMKo0pQtr6oXpFs=";
|
||||
hash = "sha256-Z/t2bqiDOfl6QbKAUPUEawNDB9de9hbkzWbDvhTL1T4=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -1,62 +1,60 @@
|
||||
{
|
||||
lib,
|
||||
aiohttp,
|
||||
aresponses,
|
||||
aioresponses,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
mashumaro,
|
||||
orjson,
|
||||
poetry-core,
|
||||
pyprojectVersionPatchHook,
|
||||
pytest-asyncio,
|
||||
pytest-cov-stub,
|
||||
pytestCheckHook,
|
||||
syrupy,
|
||||
yarl,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "open-meteo";
|
||||
version = "0.4.0";
|
||||
version = "1.0.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "frenck";
|
||||
repo = "python-open-meteo";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-J106XeSglyqrFfP1ckbnDwfE7IikaNiBQ+m14PE2SBc=";
|
||||
rev = "v${finalAttrs.version}";
|
||||
hash = "sha256-rTHHqFiar2W5LTuuXKfUv0tnvjXuNbkfzT80DWXpYiE=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
# Upstream doesn't set a version for the pyproject.toml
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "0.0.0" "${version}"
|
||||
'';
|
||||
nativeBuildInputs = [
|
||||
pyprojectVersionPatchHook
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ poetry-core ];
|
||||
build-system = [ poetry-core ];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
dependencies = [
|
||||
aiohttp
|
||||
mashumaro
|
||||
orjson
|
||||
yarl
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
aresponses
|
||||
aioresponses
|
||||
pytest-asyncio
|
||||
pytest-cov-stub
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
disabledTests = [
|
||||
# aiohttp api breakage
|
||||
"test_timeout"
|
||||
syrupy
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "open_meteo" ];
|
||||
|
||||
meta = {
|
||||
changelog = "https://github.com/frenck/python-open-meteo/releases/tag/v${version}";
|
||||
changelog = "https://github.com/frenck/python-open-meteo/releases/tag/${finalAttrs.version}";
|
||||
description = "Python client for the Open-Meteo API";
|
||||
homepage = "https://github.com/frenck/python-open-meteo";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -41,6 +41,11 @@ buildPythonPackage (finalAttrs: {
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
disabledTestPaths = [
|
||||
# wants to connect to the network
|
||||
"tests/test_client.py"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "ouman_eh_800_api" ];
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -13,14 +13,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "py-synologydsm-api";
|
||||
version = "2.10.4";
|
||||
version = "2.11.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "mib1185";
|
||||
repo = "py-synologydsm-api";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-r2f/fVcDg9zDjTBKupkNQD4zQbeTKvZB7AWyncrRKH8=";
|
||||
hash = "sha256-6rLfH5s2QrRsIDvqWuikzXGeEGkzykkvx72OU0MAe8k=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
{
|
||||
lib,
|
||||
aiohttp,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
hatchling,
|
||||
lib,
|
||||
lxml,
|
||||
mocket,
|
||||
pytest-asyncio,
|
||||
pytestCheckHook,
|
||||
yarl,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
@@ -29,6 +30,7 @@ buildPythonPackage rec {
|
||||
dependencies = [
|
||||
aiohttp
|
||||
lxml
|
||||
yarl
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "pyblu" ];
|
||||
|
||||
@@ -4,26 +4,27 @@
|
||||
casttube,
|
||||
fetchFromGitHub,
|
||||
protobuf,
|
||||
pytestCheckHook,
|
||||
setuptools,
|
||||
zeroconf,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pychromecast";
|
||||
version = "14.0.10";
|
||||
version = "14.1.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "home-assistant-libs";
|
||||
repo = "pychromecast";
|
||||
tag = version;
|
||||
hash = "sha256-m9rucHSiApT0Xqkf4sjVRehcGGgvbaoGgbT/s3SLxKI=";
|
||||
hash = "sha256-XoJUo/tTicv3jIzhgXovu+EBPVftRutkha4ZfdUWLvw=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "setuptools>=65.6,<83.0" setuptools \
|
||||
--replace-fail "wheel>=0.37.1,<0.47.0" wheel
|
||||
--replace-fail "setuptools>=65.6,<85.0" setuptools \
|
||||
--replace-fail "wheel>=0.37.1,<0.49.0" wheel
|
||||
'';
|
||||
|
||||
build-system = [ setuptools ];
|
||||
@@ -34,8 +35,9 @@ buildPythonPackage rec {
|
||||
zeroconf
|
||||
];
|
||||
|
||||
# no tests available
|
||||
doCheck = false;
|
||||
nativeCheckInputs = [
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "pychromecast" ];
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pycync";
|
||||
version = "0.5.0";
|
||||
version = "0.6.1";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.13";
|
||||
@@ -21,7 +21,7 @@ buildPythonPackage rec {
|
||||
owner = "Kinachi249";
|
||||
repo = "pycync";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-mYHUkenP0FMnwKOdZe4XjC/VnP3JJGPtuVdYR9UcouM=";
|
||||
hash = "sha256-DB2nYO6uygCyZJKWnxL1SE5LczGi7y54dH9K/1l8PnY=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
aiohttp,
|
||||
aiounittest,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
pytestCheckHook,
|
||||
setuptools,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyfronius";
|
||||
version = "0.8.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "nielstron";
|
||||
repo = "pyfronius";
|
||||
tag = version;
|
||||
hash = "sha256-KUO5e3UYIm49kgBxidizt77AplojOv4UsnIoDa0Gtv4=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [ aiohttp ];
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "pyfronius" ];
|
||||
|
||||
meta = {
|
||||
description = "Python module to communicate with Fronius Symo";
|
||||
homepage = "https://github.com/nielstron/pyfronius";
|
||||
changelog = "https://github.com/nielstron/pyfronius/releases/tag/${src.tag}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
58
pkgs/development/python-modules/pygbl/default.nix
Normal file
58
pkgs/development/python-modules/pygbl/default.nix
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
cryptography,
|
||||
fetchFromGitHub,
|
||||
lz4,
|
||||
pyelftools,
|
||||
pyprojectVersionPatchHook,
|
||||
pytestCheckHook,
|
||||
setuptools,
|
||||
setuptools-scm,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "pygbl";
|
||||
version = "1.2.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "zigpy";
|
||||
repo = "pygbl";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-FjtO0J8syPi3KWmumpKrG191mtkFw6dCdlAvRqzuQQI=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
setuptools-scm
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
pyprojectVersionPatchHook
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
pyelftools
|
||||
];
|
||||
|
||||
optional-dependencies = {
|
||||
crypto = [ cryptography ];
|
||||
lz4 = [ lz4 ];
|
||||
all =
|
||||
finalAttrs.passthru.optional-dependencies.crypto ++ finalAttrs.passthru.optional-dependencies.lz4;
|
||||
};
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytestCheckHook
|
||||
]
|
||||
++ finalAttrs.passthru.optional-dependencies.all;
|
||||
|
||||
meta = {
|
||||
changelog = "https://github.com/zigpy/pygbl/releases/tag/${finalAttrs.src.tag}";
|
||||
description = "Parser for Silicon Labs GBL and EBL firmware images";
|
||||
homepage = "https://github.com/zigpy/pygbl";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ SuperSandro2000 ];
|
||||
};
|
||||
})
|
||||
@@ -1,42 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
dicttoxml2,
|
||||
fetchFromGitHub,
|
||||
xmltodict,
|
||||
setuptools,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "pyialarm";
|
||||
version = "2.2.0";
|
||||
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "RyuzakiKK";
|
||||
repo = "pyialarm";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-rOdeYewjoFVbHdNPHN6ZC2g6X5yr84/JFE6tGSDIoRU=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
dicttoxml2
|
||||
xmltodict
|
||||
];
|
||||
|
||||
# Project has no tests
|
||||
doCheck = false;
|
||||
|
||||
pythonImportsCheck = [ "pyialarm" ];
|
||||
|
||||
meta = {
|
||||
description = "Python library to interface with Antifurto365 iAlarm systems";
|
||||
homepage = "https://github.com/RyuzakiKK/pyialarm";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
})
|
||||
@@ -7,23 +7,22 @@
|
||||
hatchling,
|
||||
pytest-asyncio,
|
||||
pytestCheckHook,
|
||||
typing-extensions,
|
||||
uv-dynamic-versioning,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "pyintelliclima";
|
||||
version = "0.4.1";
|
||||
version = "0.5.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "dvdinth";
|
||||
repo = "pyintelliclima";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-9Ny+muA1fYSZu3Y6fA6Z3Pwk5T9wVRG+UalcMxMOjxo=";
|
||||
hash = "sha256-CPGu1fq8CBlitQOVaUir2lrBijpOXQ6dx7SekQJATWk=";
|
||||
};
|
||||
|
||||
pythonRelaxDeps = [ "dacite" ];
|
||||
|
||||
build-system = [
|
||||
hatchling
|
||||
uv-dynamic-versioning
|
||||
@@ -32,6 +31,7 @@ buildPythonPackage (finalAttrs: {
|
||||
dependencies = [
|
||||
aiohttp
|
||||
dacite
|
||||
typing-extensions
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
|
||||
@@ -9,16 +9,21 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyjvcprojector";
|
||||
version = "2.0.6";
|
||||
version = "2.1.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "SteveEasley";
|
||||
repo = "pyjvcprojector";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-HFnaMIlF+C2fi8NlMtQKEMY35lAS15ij4QyFMFYhiU8=";
|
||||
hash = "sha256-tA/Z0zBPf8aiSn4oEgMBaKOOFJ7S3St4bq3BA9VDSeE=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "setuptools==84.0.0" "setuptools"
|
||||
'';
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
pythonImportsCheck = [ "jvcprojector" ];
|
||||
|
||||
@@ -12,16 +12,21 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "pykaleidescape";
|
||||
version = "1.1.6";
|
||||
version = "1.2.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "SteveEasley";
|
||||
repo = "pykaleidescape";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-irXm1kX9gy6XU1PWvFKG2IeUE7raKI2C0I6Vge1ZKsI=";
|
||||
hash = "sha256-hVjxbmacnv3Ky0WYT2QGWMk/DPUiO151EE1l06GXiNU=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "setuptools==84.0.0" "setuptools"
|
||||
'';
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
|
||||
@@ -17,14 +17,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "pylamarzocco";
|
||||
version = "2.4.4";
|
||||
version = "2.5.4";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "zweckj";
|
||||
repo = "pylamarzocco";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-urKFdze1WRg3lm8W55mn6yUC014P+ZDE2eDeiMQ0PtA=";
|
||||
hash = "sha256-qYgOmaSZraxALXce/rg0Xpzx9mdRpYa/oqi+6Ka0ksM=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
{
|
||||
lib,
|
||||
aiohttp,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
lib,
|
||||
hatch-vcs,
|
||||
hatchling,
|
||||
mashumaro,
|
||||
poetry-core,
|
||||
pyprojectVersionPatchHook,
|
||||
pytest-asyncio,
|
||||
pytestCheckHook,
|
||||
@@ -12,19 +13,27 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyrail";
|
||||
version = "0.4.1";
|
||||
version = "0.6.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "tjorim";
|
||||
repo = "pyrail";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-MFsFtspL9cmhwu2oo8wx0Sjx2VpQe92JP9e0M7U8CL8=";
|
||||
hash = "sha256-nQmlZn+F4JzZZf3xmdlwh5vDvhbnw9iTa5BGAJyl7t4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pyprojectVersionPatchHook ];
|
||||
|
||||
build-system = [ poetry-core ];
|
||||
pythonRelaxDeps = [
|
||||
"aiohttp"
|
||||
"mashumaro"
|
||||
];
|
||||
|
||||
build-system = [
|
||||
hatch-vcs
|
||||
hatchling
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
aiohttp
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyrfxtrx";
|
||||
version = "0.32.0";
|
||||
version = "0.34.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Danielhiversen";
|
||||
repo = "pyRFXtrx";
|
||||
tag = version;
|
||||
hash = "sha256-6gD6ch7DyaD9nCY/VfyJHmV4gEDPsDfVKjNaNedmVVE=";
|
||||
hash = "sha256-JMAQhJP7U9xSoax3EvvlP5yrTWcteyoNjLKOxgi3Dvg=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
aiohttp,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pyrituals";
|
||||
version = "0.0.7";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "milanmeu";
|
||||
repo = "pyrituals";
|
||||
tag = version;
|
||||
hash = "sha256-nCyfwOONtpwRLFq3crRacmrWef6J3mOfKz4fvkOcb3g=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [ aiohttp ];
|
||||
|
||||
# Project has no tests
|
||||
doCheck = false;
|
||||
|
||||
pythonImportsCheck = [ "pyrituals" ];
|
||||
|
||||
meta = {
|
||||
description = "Python wrapper for the Rituals Perfume Genie API";
|
||||
homepage = "https://github.com/milanmeu/pyrituals";
|
||||
changelog = "https://github.com/milanmeu/pyrituals/releases/tag/${src.tag}";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
{
|
||||
lib,
|
||||
aiohttp,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
lxml,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pysaj";
|
||||
version = "0.0.16";
|
||||
format = "setuptools";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "fredericvl";
|
||||
repo = "pysaj";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-7mN6GPRbXfEUfCrCrCs71SSt4x2Ch2y3a5rfXnuwVA0=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
aiohttp
|
||||
lxml
|
||||
];
|
||||
|
||||
# Module has no tests
|
||||
doCheck = false;
|
||||
|
||||
pythonImportsCheck = [ "pysaj" ];
|
||||
|
||||
meta = {
|
||||
description = "Library to communicate with SAJ inverters";
|
||||
homepage = "https://github.com/fredericvl/pysaj";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ fab ];
|
||||
};
|
||||
}
|
||||
@@ -1,27 +1,28 @@
|
||||
{
|
||||
aiohttp,
|
||||
aresponses,
|
||||
aiointercept,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
freezegun,
|
||||
lib,
|
||||
poetry-core,
|
||||
pyprojectVersionPatchHook,
|
||||
pytest-asyncio,
|
||||
pytest-cov-stub,
|
||||
pytestCheckHook,
|
||||
syrupy,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "pysmhi";
|
||||
version = "2.0.0";
|
||||
version = "2.1.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "gjohansson-ST";
|
||||
repo = "pysmhi";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-9t/mhmQfNwuX2QVS1OOeKZOARXK9otjGtwJEfVeizPU=";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-QGpheSXmYWLgrIYg98qBgR2R6pFCH1eB0HQPK1T3/qo=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
@@ -37,8 +38,9 @@ buildPythonPackage rec {
|
||||
pythonImportsCheck = [ "pysmhi" ];
|
||||
|
||||
nativeCheckInputs = [
|
||||
aresponses
|
||||
aiointercept
|
||||
freezegun
|
||||
pytest-asyncio
|
||||
pytest-cov-stub
|
||||
pytestCheckHook
|
||||
syrupy
|
||||
@@ -47,10 +49,10 @@ buildPythonPackage rec {
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
||||
meta = {
|
||||
changelog = "https://github.com/gjohansson-ST/pysmhi/releases/tag/${src.tag}";
|
||||
changelog = "https://github.com/gjohansson-ST/pysmhi/releases/tag/${finalAttrs.src.tag}";
|
||||
description = "Retrieve open data from SMHI api";
|
||||
homepage = "https://github.com/gjohansson-ST/pysmhi";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ dotlambda ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
hatchling,
|
||||
jinja2,
|
||||
modbus-connection,
|
||||
pytestCheckHook,
|
||||
pytest-asyncio,
|
||||
@@ -11,14 +12,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "pystiebeleltron";
|
||||
version = "0.9.2";
|
||||
version = "0.10.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ThyMYthOS";
|
||||
repo = "python-stiebel-eltron";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-aSl5JRpp9Mk5bBpXg8SQxDNNTFlkH1HaVT8FLUW8hf8=";
|
||||
hash = "sha256-9g/ZM3h9ivySAYwDgbswwkIYXeG44IhOvgJyLnwdKps=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
@@ -26,9 +27,10 @@ buildPythonPackage (finalAttrs: {
|
||||
dependencies = [
|
||||
modbus-connection
|
||||
]
|
||||
++ modbus-connection.optional-dependencies.pymodbus;
|
||||
++ modbus-connection.optional-dependencies.tmodbus;
|
||||
|
||||
nativeCheckInputs = [
|
||||
jinja2
|
||||
pytestCheckHook
|
||||
pytest-asyncio
|
||||
pytest-mock
|
||||
|
||||
@@ -19,14 +19,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "python-bsblan";
|
||||
version = "6.1.9";
|
||||
version = "6.2.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "liudger";
|
||||
repo = "python-bsblan";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-qJm+TNdPkeE+An9VI338i/Wwvb7zCnVRcYG6ooe+kNA=";
|
||||
hash = "sha256-lNx30Zi4R06sSC27sqal7tWi1Bz9AAAsZhCdjUqlUNQ=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -22,14 +22,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "python-kasa";
|
||||
version = "0.11.0.1";
|
||||
version = "0.12.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "python-kasa";
|
||||
repo = "python-kasa";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-MrAfYXvLenj5ntJro+vEktZbOB2MnwLQyRGyU+RmYXM=";
|
||||
hash = "sha256-z984z3Rqh5wZ+Tbum+vOaJjXOL8ljX1g/HkhdlQi4rI=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
{
|
||||
lib,
|
||||
aiohttp,
|
||||
aiointercept,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
poetry-core,
|
||||
aiohttp,
|
||||
yarl,
|
||||
mashumaro,
|
||||
orjson,
|
||||
poetry-core,
|
||||
pyprojectVersionPatchHook,
|
||||
pytestCheckHook,
|
||||
pytest-asyncio,
|
||||
pytest-cov-stub,
|
||||
aioresponses,
|
||||
pytestCheckHook,
|
||||
syrupy,
|
||||
yarl,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "python-open-router";
|
||||
version = "0.4.0";
|
||||
version = "0.5.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "joostlek";
|
||||
repo = "python-open-router";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-hf8Ay3/xXH262/1R07mN0iQpOlHFhHb6VUZoYQEq8YI=";
|
||||
hash = "sha256-Bl+BQePvH4rgGCH4uXS3yVDTGP0XfSId0UdMrfThF0I=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pyprojectVersionPatchHook ];
|
||||
@@ -33,16 +33,16 @@ buildPythonPackage rec {
|
||||
|
||||
dependencies = [
|
||||
aiohttp
|
||||
yarl
|
||||
mashumaro
|
||||
orjson
|
||||
yarl
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytestCheckHook
|
||||
aiointercept
|
||||
pytest-asyncio
|
||||
pytest-cov-stub
|
||||
aioresponses
|
||||
pytestCheckHook
|
||||
syrupy
|
||||
];
|
||||
|
||||
|
||||
@@ -14,19 +14,20 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "python-openevse-http";
|
||||
version = "1.5.0";
|
||||
version = "1.8.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "firstof9";
|
||||
repo = "python-openevse-http";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-l4/ZeIi6em5Dmp7O15Wg4brd4J2kTsIxSqLSGFS/Ihs=";
|
||||
hash = "sha256-5PGRmUP6f7/dis4H1Am//LvIO8OpDCGx773i4H+B3Ls=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "setuptools-scm>=10.1.1" setuptools_scm
|
||||
--replace-fail "setuptools>=84.0.0" setuptools \
|
||||
--replace-fail "setuptools-scm>=10.3.4" setuptools_scm
|
||||
'';
|
||||
|
||||
build-system = [
|
||||
|
||||
@@ -7,23 +7,27 @@
|
||||
pytest-asyncio,
|
||||
pytest-mock,
|
||||
pytestCheckHook,
|
||||
zeroconf,
|
||||
}:
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "python-qube-heatpump";
|
||||
version = "1.15.0";
|
||||
version = "1.17.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "MattieGit";
|
||||
repo = "python-qube-heatpump";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-CKILZdoFMIEkRT7KIa8AQaBJXzis/h8Yaf78OF4zjgc=";
|
||||
hash = "sha256-83eYbL2mS+821f9hDQe/ladPK+ThFawp+Ij7eI8mtng=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
|
||||
dependencies = [ pymodbus ];
|
||||
dependencies = [
|
||||
pymodbus
|
||||
zeroconf
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytest-asyncio
|
||||
|
||||
@@ -19,14 +19,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "pyzonneplan";
|
||||
version = "0.2.0";
|
||||
version = "0.3.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "erwindouna";
|
||||
repo = "pyzonneplan";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-uvNp/yP6k+qLlBXQmh0gM4kbFS8uAZfyonMGCvxbn38=";
|
||||
hash = "sha256-sjE1Z2Odh5yC+kfGuEeF+n/gJyXtrWvFonfT4lM21T4=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pyprojectVersionPatchHook ];
|
||||
|
||||
@@ -20,19 +20,19 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "renault-api";
|
||||
version = "0.5.15";
|
||||
version = "0.6.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "hacf-fr";
|
||||
repo = "renault-api";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-hlnWSNTckmSOEC58dhGjra1wSkKrffJnIAJNZfyCsIs=";
|
||||
hash = "sha256-7r/+U+TwAgrgyKv4HOWIMQ8czVRVAfqr+mkpH24FsCk=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "uv_build>=0.12.21,<0.13" "uv_build"
|
||||
--replace-fail "uv_build>=0.13,<0.14" "uv_build"
|
||||
'';
|
||||
|
||||
build-system = [ uv-build ];
|
||||
|
||||
@@ -1,39 +1,49 @@
|
||||
{
|
||||
lib,
|
||||
aiomqtt,
|
||||
buildPythonPackage,
|
||||
click,
|
||||
fetchFromGitHub,
|
||||
mashumaro,
|
||||
orjson,
|
||||
paho-mqtt,
|
||||
poetry-core,
|
||||
pytest-asyncio,
|
||||
pytestCheckHook,
|
||||
tabulate,
|
||||
uv-build,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "roombapy";
|
||||
version = "1.9.1";
|
||||
version = "2.0.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "pschmitt";
|
||||
repo = "roombapy";
|
||||
tag = version;
|
||||
hash = "sha256-63PqNmJC0IWPPMVyZdKoZikvBA4phMcYxlTBk/m1cq0=";
|
||||
hash = "sha256-7E68w7BDmERCCQjdB79vw60Xy/nAQKH2ym8qzPOAU2I=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "uv_build>=0.12.5,<0.13.0" "uv_build"
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
poetry-core
|
||||
];
|
||||
|
||||
pythonRelaxDeps = [ "orjson" ];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
build-system = [
|
||||
uv-build
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
aiomqtt
|
||||
mashumaro
|
||||
orjson
|
||||
paho-mqtt
|
||||
];
|
||||
|
||||
optional-dependencies.cli = [
|
||||
@@ -48,7 +58,12 @@ buildPythonPackage rec {
|
||||
|
||||
disabledTestPaths = [
|
||||
# Requires network access
|
||||
"tests/test_client.py"
|
||||
"tests/test_commands.py"
|
||||
"tests/test_discovery.py"
|
||||
"tests/test_robustness.py"
|
||||
"tests/test_supervisor.py"
|
||||
"tests/test_watch.py"
|
||||
];
|
||||
|
||||
disabledTests = [
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "securetar";
|
||||
version = "2026.4.1";
|
||||
version = "2026.10.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "home-assistant-libs";
|
||||
repo = "securetar";
|
||||
tag = version;
|
||||
hash = "sha256-y2Ow272094Qrn52LGYkuRcjaR6d0C6bF12g7W6AwSMI=";
|
||||
hash = "sha256-+XP6bbRbs1ceIq3/juJcwr7NwdYAJg7MM/PZ/FZZZoY=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -16,14 +16,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "sense-energy";
|
||||
version = "0.14.3";
|
||||
version = "0.15.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "scottbonline";
|
||||
repo = "sense";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-Ug58qKlFBe4DpAKMWNup7A2QTslGaaY2OMPyJtnfWfM=";
|
||||
hash = "sha256-XzOOD40HK/K7H/DvPhCdpLeDv0lDrmLnTiTf+rK4H7Y=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -18,14 +18,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "soco";
|
||||
version = "0.31.4";
|
||||
version = "0.32.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "SoCo";
|
||||
repo = "SoCo";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-v24UzJ+/TlEBmNYP51UTI96bvi10E5orNFKS5q1bSyE=";
|
||||
hash = "sha256-lGHhhZ7zRM06Fnm7yb5gQSWOQUbsBYW3T1/WfQX2PdA=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "sofar-modbus";
|
||||
version = "0.18.0";
|
||||
version = "0.25.3";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "darkrain-nl";
|
||||
repo = "sofar-modbus";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-Ks8NhghqiXsHwKB+DxZMMFe2ZomVZwpDGX/Avlnf3KE=";
|
||||
hash = "sha256-yd2ZHxVfxbtduMdgIHaj39juA9nA87G4pdRlLTojev8=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
lib,
|
||||
aiohttp,
|
||||
aioresponses,
|
||||
aiointercept,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
mashumaro,
|
||||
@@ -16,14 +16,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "spotifyaio";
|
||||
version = "2.0.2";
|
||||
version = "2.1.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "joostlek";
|
||||
repo = "python-spotify";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-Bob6JpbUaQkeH2c5YKVSUkY/FNyVTf+qtB2Rm1xCRX0=";
|
||||
hash = "sha256-bBEhElQO36jDsEt12MI7hfhSV5zCuavkPwB3TcTTqfI=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -42,7 +42,7 @@ buildPythonPackage rec {
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
aioresponses
|
||||
aiointercept
|
||||
syrupy
|
||||
pytest-asyncio
|
||||
pytest-cov-stub
|
||||
|
||||
@@ -1,56 +1,40 @@
|
||||
{
|
||||
lib,
|
||||
aiodns,
|
||||
aiohttp,
|
||||
async-timeout,
|
||||
attrs,
|
||||
brotlipy,
|
||||
buildPythonPackage,
|
||||
faust-cchardet,
|
||||
click,
|
||||
colorama,
|
||||
fetchFromGitHub,
|
||||
halo,
|
||||
poetry-core,
|
||||
requests,
|
||||
pytest-asyncio,
|
||||
pytest-cov,
|
||||
pytestCheckHook,
|
||||
rich,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "surepy";
|
||||
version = "0.9.0";
|
||||
version = "0.10.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "benleb";
|
||||
repo = "surepy";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-ETgpXSUUsV1xoZjdnL2bzn4HwDjKC2t13yXwf28OBqI=";
|
||||
hash = "sha256-b93SqZr+9VKYHoFxkutZ01LsuvtGiDO5FrHIrZvho94=";
|
||||
};
|
||||
|
||||
pythonRelaxDeps = [
|
||||
"aiohttp"
|
||||
"async-timeout"
|
||||
"rich"
|
||||
];
|
||||
pythonRelaxDeps = [ "aiohttp" ];
|
||||
|
||||
build-system = [ poetry-core ];
|
||||
|
||||
dependencies = [
|
||||
aiodns
|
||||
aiohttp
|
||||
async-timeout
|
||||
attrs
|
||||
brotlipy
|
||||
click
|
||||
colorama
|
||||
faust-cchardet
|
||||
halo
|
||||
requests
|
||||
rich
|
||||
];
|
||||
]
|
||||
++ aiohttp.optional-dependencies.speedups;
|
||||
|
||||
# Project has no tests
|
||||
# tests require to configure a token
|
||||
doCheck = false;
|
||||
|
||||
pythonImportsCheck = [ "surepy" ];
|
||||
|
||||
@@ -16,14 +16,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "tesla-fleet-api";
|
||||
version = "1.18.1";
|
||||
version = "1.19.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Teslemetry";
|
||||
repo = "python-tesla-fleet-api";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-bDEH5vcJpvuf+5o4ksvLam7P79ppfuFLYazevwGrdCM=";
|
||||
hash = "sha256-OCkiF1PJ+FqPFBiRomI9Irnx7GeFdRXHqDTGCrELZaw=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "tesla-protocol";
|
||||
version = "3.0.2";
|
||||
version = "4.0.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Teslemetry";
|
||||
repo = "tesla-protocol";
|
||||
tag = "@teslemetry/tesla-protocol@${finalAttrs.version}";
|
||||
hash = "sha256-kYLSBSxqAd0Gj9ZzYgCZkfN0LGdde/zLqX+3nbHV9+8=";
|
||||
hash = "sha256-bW3AHgs/Eacml1FBBWUpTkwxFJqvF352o0O4nxxItLc=";
|
||||
};
|
||||
|
||||
sourceRoot = "${finalAttrs.src.name}/packages/python";
|
||||
@@ -35,6 +35,11 @@ buildPythonPackage (finalAttrs: {
|
||||
pytestCheckHook
|
||||
];
|
||||
|
||||
disabledTestPaths = [
|
||||
# testing dependencies isolated is useless and fails
|
||||
"tests/test_descriptor_namespace.py::DescriptorNamespaceTests"
|
||||
];
|
||||
|
||||
meta = {
|
||||
changelog = "https://github.com/Teslemetry/tesla-protocol/releases/tag/${finalAttrs.src.tag}";
|
||||
description = "Tesla vehicle-command, fleet-telemetry and energy protobuf bindings for Python";
|
||||
|
||||
@@ -8,14 +8,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "teslemetry-stream";
|
||||
version = "1.2.0";
|
||||
version = "1.3.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Teslemetry";
|
||||
repo = "python-teslemetry-stream";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-6Dv00IXc92DRs7llGi9G+aRNnKCvGlbisuqVa5F7TD4=";
|
||||
hash = "sha256-nznyXrWtP5OPW9JgpznIku5FxPw6IvJOOGPjDMyNzsM=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -15,13 +15,13 @@
|
||||
}:
|
||||
|
||||
let
|
||||
version = "0.6.2";
|
||||
version = "1.1.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "wlcrs";
|
||||
repo = "tmodbus";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-VqIke5S7x5Qm9dsk7/e8jqNYA1PQ7akdJVbXt0lcIC8=";
|
||||
hash = "sha256-2UzEd6pyq77vEn/HRMX+SlCATVUGcrZu0aijZOY86mQ=";
|
||||
};
|
||||
|
||||
rmodbus-server = rustPlatform.buildRustPackage (finalAttrs: {
|
||||
@@ -32,7 +32,7 @@ let
|
||||
|
||||
sourceRoot = "${src.name}/integration_tests/rmodbus";
|
||||
|
||||
cargoHash = "sha256-wJ6HVtl7X+1M3By06q02K2naBFEvZNWh42StOhJbYt0=";
|
||||
cargoHash = "sha256-vZgLhVsdH8M42YyuJO0mBq/a1oAGmlqic3S72QcVjyA=";
|
||||
|
||||
meta = {
|
||||
description = "Rust Modbus server";
|
||||
|
||||
@@ -9,26 +9,21 @@
|
||||
# dependencies
|
||||
aiofiles,
|
||||
aiohttp,
|
||||
aiozoneinfo,
|
||||
av,
|
||||
convertertools,
|
||||
dateparser,
|
||||
orjson,
|
||||
packaging,
|
||||
pillow,
|
||||
platformdirs,
|
||||
propcache,
|
||||
pydantic,
|
||||
pydantic-extra-types,
|
||||
pyjwt,
|
||||
rich,
|
||||
typer,
|
||||
yarl,
|
||||
|
||||
# tests
|
||||
aiosqlite,
|
||||
asttokens,
|
||||
ffmpeg,
|
||||
jsonschema,
|
||||
pytest-asyncio,
|
||||
pytest-benchmark,
|
||||
pytest-cov-stub,
|
||||
@@ -39,14 +34,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "uiprotect";
|
||||
version = "23.0.1";
|
||||
version = "25.0.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "uilibs";
|
||||
repo = "uiprotect";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-xpp55ROfErXDk/+rbowGTEHvl6DTbTToC0b0GwNyGvg=";
|
||||
hash = "sha256-2WRAVqhkAw5uX+icjT9fOD0hFe/zEjomk7qZmdXiKDY=";
|
||||
};
|
||||
|
||||
build-system = [ poetry-core ];
|
||||
@@ -65,27 +60,22 @@ buildPythonPackage (finalAttrs: {
|
||||
dependencies = [
|
||||
aiofiles
|
||||
aiohttp
|
||||
aiozoneinfo
|
||||
av
|
||||
convertertools
|
||||
dateparser
|
||||
orjson
|
||||
packaging
|
||||
pillow
|
||||
platformdirs
|
||||
propcache
|
||||
pydantic
|
||||
pydantic-extra-types
|
||||
pyjwt
|
||||
rich
|
||||
typer
|
||||
yarl
|
||||
];
|
||||
|
||||
nativeCheckInputs = [
|
||||
aiosqlite
|
||||
asttokens
|
||||
ffmpeg # Required for command ffprobe
|
||||
jsonschema
|
||||
pytest-asyncio
|
||||
pytest-benchmark
|
||||
pytest-cov-stub
|
||||
@@ -96,6 +86,11 @@ buildPythonPackage (finalAttrs: {
|
||||
|
||||
pytestFlags = [ "--benchmark-disable" ];
|
||||
|
||||
disabledTests = [
|
||||
# not useful in nix packaging
|
||||
"test_import_skips_optional_test_util_dependencies"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "uiprotect" ];
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -9,30 +9,31 @@
|
||||
|
||||
# dependencies
|
||||
aiohttp,
|
||||
aiospinel,
|
||||
bellows,
|
||||
coloredlogs,
|
||||
colorlog,
|
||||
crc,
|
||||
gpiod,
|
||||
pygbl,
|
||||
tqdm,
|
||||
typing-extensions,
|
||||
zigpy,
|
||||
|
||||
# tests
|
||||
aioresponses,
|
||||
pytestCheckHook,
|
||||
pytest-asyncio,
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "universal-silabs-flasher";
|
||||
version = "1.1.0";
|
||||
version = "1.3.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "NabuCasa";
|
||||
repo = "universal-silabs-flasher";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-niNjHhOwy+5mgs4UY9bIBykmZ+7TifbYnMuG1LAV7PA=";
|
||||
hash = "sha256-xpeq9W88jp7RM+rzy8T3d/PpuGAeF5RPMgm6EwWc2wI=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -45,17 +46,18 @@ buildPythonPackage rec {
|
||||
|
||||
dependencies = [
|
||||
aiohttp
|
||||
aiospinel
|
||||
bellows
|
||||
coloredlogs
|
||||
colorlog
|
||||
crc
|
||||
pygbl
|
||||
tqdm
|
||||
typing-extensions
|
||||
zigpy
|
||||
]
|
||||
++ lib.optionals (stdenv.hostPlatform.isLinux) [ gpiod ];
|
||||
++ lib.optionals stdenv.hostPlatform.isLinux [ gpiod ];
|
||||
|
||||
nativeCheckInputs = [
|
||||
aioresponses
|
||||
pytestCheckHook
|
||||
pytest-asyncio
|
||||
];
|
||||
|
||||
@@ -14,14 +14,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "victron-mqtt";
|
||||
version = "2026.9.10";
|
||||
version = "2026.10.3";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "tomer-w";
|
||||
repo = "victron_mqtt";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-6pXfKH8tUZgKweSAREzdyzNTCGaEngHiOrZ/N8lxfKk=";
|
||||
hash = "sha256-SMCpBlGdQmXe0aeJm4t9iXx0t/pvgJhxnQhDYRoScag=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "volvocarsapi";
|
||||
version = "0.4.4";
|
||||
version = "0.5.0";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.12";
|
||||
@@ -20,9 +20,14 @@ buildPythonPackage rec {
|
||||
owner = "thomasddn";
|
||||
repo = "volvo-cars-api";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-8ASR7IE84Hrv+u4ORULMTSgBnn7TMIKwzFKiKWhQLIg=";
|
||||
hash = "sha256-KxDgtGe7SrrYdj+dT4/C/xH85mkih9PDzFxj6QqFleU=";
|
||||
};
|
||||
|
||||
pythonRelaxDeps = [
|
||||
"aiohttp"
|
||||
"yarl"
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
pyprojectVersionPatchHook
|
||||
];
|
||||
|
||||
@@ -12,14 +12,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "xknx";
|
||||
version = "3.20.0";
|
||||
version = "4.1.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "XKNX";
|
||||
repo = "xknx";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-/KUFf1d2+IcqGiLyX5mls7sMhfHU9KBgK1c/t2835WA=";
|
||||
hash = "sha256-Axgh/ld4vbTktZxLcF2Gkk5Ojfduxgbk4oRDcIYzYmM=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "zeroconf";
|
||||
version = "0.151.5";
|
||||
version = "0.153.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "jstasiak";
|
||||
repo = "python-zeroconf";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-KDHDVXg1s72iqgPYknp9dHB2oc5jNACdxplxWnPTh6w=";
|
||||
hash = "sha256-6jxhL1fwzcYt7g6fNqMVNzFZLjfS0cErt4cjS1YQJxU=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "zha-quirks";
|
||||
version = "2.3.0";
|
||||
version = "2.4.1";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.12";
|
||||
@@ -23,7 +23,7 @@ buildPythonPackage rec {
|
||||
owner = "zigpy";
|
||||
repo = "zha-device-handlers";
|
||||
tag = version;
|
||||
hash = "sha256-F3NUZUepNKef9fJY/eBfbO90ZJXWyzyf5uaZmonaCmc=";
|
||||
hash = "sha256-lQdiViqRVj10djcq67j1H0l37AA+T/8m8WaFcJwzJVg=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
frozendict,
|
||||
looptime,
|
||||
pyprojectVersionPatchHook,
|
||||
pytest-asyncio_0,
|
||||
pytest-asyncio,
|
||||
pytest-timeout,
|
||||
pytest-xdist,
|
||||
pytestCheckHook,
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "zha";
|
||||
version = "2.3.1";
|
||||
version = "2.4.2";
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonOlder "3.12";
|
||||
@@ -35,7 +35,7 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "zigpy";
|
||||
repo = "zha";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-OwYO22/DEVn6746+KKyUjxCM7C/MdSvPGMfu8/p2y10=";
|
||||
hash = "sha256-0d3bh1gHCQ4YC4NSi4gKXRzsyTazwY8AC9f/sbbwPrA=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -69,7 +69,7 @@ buildPythonPackage (finalAttrs: {
|
||||
nativeCheckInputs = [
|
||||
freezegun
|
||||
looptime
|
||||
pytest-asyncio_0
|
||||
pytest-asyncio
|
||||
pytest-timeout
|
||||
pytest-xdist
|
||||
pytestCheckHook
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "zigpy-deconz";
|
||||
version = "1.0.0";
|
||||
version = "1.1.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "zigpy";
|
||||
repo = "zigpy-deconz";
|
||||
tag = version;
|
||||
hash = "sha256-ZV5X075WEg9FMAphMD9kxnNxJ6TDX7k1EUcDI01mYLw=";
|
||||
hash = "sha256-xlqxH8j98RyKdSnOhdPKpQMn2z3TbHod9wvq7Lx2OsQ=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
setuptools,
|
||||
aiohttp,
|
||||
aiospinel,
|
||||
mashumaro,
|
||||
pyprojectVersionPatchHook,
|
||||
pytest-asyncio,
|
||||
pytestCheckHook,
|
||||
@@ -14,7 +13,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "zigpy-ziggurat";
|
||||
version = "1.1.1";
|
||||
version = "1.2.0";
|
||||
pyproject = true;
|
||||
__structuredAttrs = true;
|
||||
|
||||
@@ -22,11 +21,11 @@ buildPythonPackage (finalAttrs: {
|
||||
owner = "zigpy";
|
||||
repo = "zigpy-ziggurat";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-Xde97LKGs7Z/qWhjZSNfFowSsExrQiHkp73DqDCGvLQ=";
|
||||
hash = "sha256-Tf5nAYK/UpqegRFSDCmr0fX40X5BmsLlc+ftggK0Am0=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
# finds version 0.0.1 instead of 1.0.1
|
||||
# falls back to wrong version
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail ', "setuptools-git-versioning<3"' ""
|
||||
'';
|
||||
@@ -42,7 +41,6 @@ buildPythonPackage (finalAttrs: {
|
||||
dependencies = [
|
||||
aiohttp
|
||||
aiospinel
|
||||
mashumaro
|
||||
zigpy
|
||||
];
|
||||
|
||||
|
||||
@@ -27,6 +27,11 @@ buildPythonPackage (finalAttrs: {
|
||||
hash = "sha256-+rTos8iSyS1b6iAHYbEbStwNH00XQP7SdCwAQBVNnYM=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# https://github.com/zigpy/zigpy-znp/pull/291
|
||||
./zigpy-2.4.1.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace-fail "timeout = 20" "timeout = 300" \
|
||||
@@ -54,12 +59,6 @@ buildPythonPackage (finalAttrs: {
|
||||
|
||||
pytestFlags = [ "--reruns=3" ];
|
||||
|
||||
disabledTests = [
|
||||
# broken by https://github.com/zigpy/zigpy/pull/1635
|
||||
"test_concurrency_auto_config"
|
||||
"test_request_concurrency"
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "zigpy_znp" ];
|
||||
|
||||
meta = {
|
||||
|
||||
530
pkgs/development/python-modules/zigpy-znp/zigpy-2.4.1.patch
Normal file
530
pkgs/development/python-modules/zigpy-znp/zigpy-2.4.1.patch
Normal file
@@ -0,0 +1,530 @@
|
||||
From afe64c762c028df37db3629a8b82933ab221f236 Mon Sep 17 00:00:00 2001
|
||||
From: puddly <32534428+puddly@users.noreply.github.com>
|
||||
Date: Wed, 4 Nov 2026 14:33:03 +0000
|
||||
Subject: [PATCH 1/2] Separate radio TSN from ZCL/ZDO TSN
|
||||
|
||||
---
|
||||
tests/application/test_requests.py | 95 +++++++++++++++++----
|
||||
tests/conftest.py | 15 ++--
|
||||
zigpy_znp/zigbee/application.py | 128 ++++++++++++++++-------------
|
||||
3 files changed, 159 insertions(+), 79 deletions(-)
|
||||
|
||||
diff --git a/tests/application/test_requests.py b/tests/application/test_requests.py
|
||||
index f073cf6..1392a92 100644
|
||||
--- a/tests/application/test_requests.py
|
||||
+++ b/tests/application/test_requests.py
|
||||
@@ -5,6 +5,7 @@
|
||||
from zigpy.exceptions import DeliveryError
|
||||
import zigpy.profiles
|
||||
import zigpy.types as zigpy_t
|
||||
+import zigpy.zcl.foundation
|
||||
import zigpy.zdo.types as zdo_t
|
||||
|
||||
import zigpy_znp.commands as c
|
||||
@@ -68,16 +69,15 @@ async def test_zigpy_request(device, make_application):
|
||||
DstEndpoint=1,
|
||||
SrcEndpoint=1,
|
||||
ClusterId=6,
|
||||
- TSN=TSN,
|
||||
Data=bytes([0x01, TSN, 0x01]),
|
||||
partial=True,
|
||||
),
|
||||
responses=[
|
||||
c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS),
|
||||
- c.AF.DataConfirm.Callback(
|
||||
+ lambda req: c.AF.DataConfirm.Callback(
|
||||
Status=t.Status.SUCCESS,
|
||||
Endpoint=1,
|
||||
- TSN=TSN,
|
||||
+ TSN=req.TSN,
|
||||
),
|
||||
c.ZDO.SrcRtgInd.Callback(DstAddr=device.nwk, Relays=[]),
|
||||
c.AF.IncomingMsg.Callback(
|
||||
@@ -127,16 +127,15 @@ async def test_zigpy_request_failure(device, make_application, mocker):
|
||||
DstEndpoint=1,
|
||||
SrcEndpoint=1,
|
||||
ClusterId=6,
|
||||
- TSN=TSN,
|
||||
Data=bytes([0x01, TSN, 0x01]),
|
||||
partial=True,
|
||||
),
|
||||
responses=[
|
||||
c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS),
|
||||
- c.AF.DataConfirm.Callback(
|
||||
+ lambda req: c.AF.DataConfirm.Callback(
|
||||
Status=t.Status.FAILURE,
|
||||
Endpoint=1,
|
||||
- TSN=TSN,
|
||||
+ TSN=req.TSN,
|
||||
),
|
||||
],
|
||||
)
|
||||
@@ -251,7 +250,6 @@ async def test_broadcast(device, make_application, mocker):
|
||||
DstPanId=0x0000,
|
||||
SrcEndpoint=1,
|
||||
ClusterId=3,
|
||||
- TSN=1,
|
||||
Radius=3,
|
||||
Data=b"???",
|
||||
partial=True,
|
||||
@@ -341,6 +339,72 @@ async def callback(req):
|
||||
await app.shutdown()
|
||||
|
||||
|
||||
+@pytest.mark.parametrize("device", [FormedLaunchpadCC26X2R1])
|
||||
+async def test_concurrent_same_tsn_requests(device, make_application):
|
||||
+ app, znp_server = make_application(server_cls=device)
|
||||
+ await app.startup(auto_form=False)
|
||||
+
|
||||
+ device1 = app.add_initialized_device(ieee=t.EUI64(range(8)), nwk=0xAAAA)
|
||||
+ device2 = app.add_initialized_device(ieee=t.EUI64(range(1, 9)), nwk=0xBBBB)
|
||||
+
|
||||
+ requests = {}
|
||||
+ both_sent = asyncio.Event()
|
||||
+
|
||||
+ def delayed_confirm(req):
|
||||
+ requests[req.DstAddrModeAddress.address] = req
|
||||
+
|
||||
+ if len(requests) == 2:
|
||||
+ both_sent.set()
|
||||
+
|
||||
+ async def inner():
|
||||
+ await both_sent.wait()
|
||||
+
|
||||
+ # The second device fails and its confirm arrives first
|
||||
+ if req.DstAddrModeAddress.address == device1.nwk:
|
||||
+ await asyncio.sleep(0.1)
|
||||
+ status = t.Status.SUCCESS
|
||||
+ else:
|
||||
+ status = t.Status.MAC_NO_ACK
|
||||
+
|
||||
+ znp_server.send(
|
||||
+ c.AF.DataConfirm.Callback(Status=status, Endpoint=1, TSN=req.TSN)
|
||||
+ )
|
||||
+
|
||||
+ asyncio.create_task(inner())
|
||||
+
|
||||
+ znp_server.reply_to(
|
||||
+ c.AF.DataRequestExt.Req(partial=True),
|
||||
+ responses=[
|
||||
+ c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS),
|
||||
+ delayed_confirm,
|
||||
+ ],
|
||||
+ )
|
||||
+
|
||||
+ # Both requests use the same ZCL TSN
|
||||
+ rsp1, rsp2 = await asyncio.gather(
|
||||
+ *[
|
||||
+ app.request(
|
||||
+ device=dev,
|
||||
+ profile=260,
|
||||
+ cluster=1,
|
||||
+ src_ep=1,
|
||||
+ dst_ep=1,
|
||||
+ sequence=1,
|
||||
+ data=b"\x00\x01\x00",
|
||||
+ )
|
||||
+ for dev in (device1, device2)
|
||||
+ ],
|
||||
+ return_exceptions=True,
|
||||
+ )
|
||||
+
|
||||
+ assert requests[device1.nwk].TSN != requests[device2.nwk].TSN
|
||||
+ assert rsp1 == (zigpy.zcl.foundation.Status.SUCCESS, "")
|
||||
+ assert isinstance(rsp2, DeliveryError)
|
||||
+ assert rsp2.status == t.Status.MAC_NO_ACK
|
||||
+
|
||||
+ await app.shutdown()
|
||||
+
|
||||
+
|
||||
@pytest.mark.parametrize("device", FORMED_DEVICES)
|
||||
async def test_nonstandard_profile(device, make_application):
|
||||
app, znp_server = make_application(server_cls=device)
|
||||
@@ -382,7 +446,7 @@ async def test_nonstandard_profile(device, make_application):
|
||||
SecurityUse=t.Bool(False),
|
||||
TimeStamp=12345678,
|
||||
TSN=0,
|
||||
- Data=b"\x08" + bytes([req.TSN]) + b"\x0b\x00\x00",
|
||||
+ Data=b"\x08" + bytes([req.Data[1]]) + b"\x0b\x00\x00",
|
||||
MacSrcAddr=device.nwk,
|
||||
MsgResultRadius=29,
|
||||
),
|
||||
@@ -554,7 +618,7 @@ def data_confirm_replier(req):
|
||||
return c.AF.DataConfirm.Callback(
|
||||
Status=t.Status.SUCCESS if route_discovered else t.Status.NWK_NO_ROUTE,
|
||||
Endpoint=1,
|
||||
- TSN=1,
|
||||
+ TSN=req.TSN,
|
||||
)
|
||||
|
||||
def set_route_discovered(req):
|
||||
@@ -622,7 +686,7 @@ def data_confirm_replier(req):
|
||||
return c.AF.DataConfirm.Callback(
|
||||
Status=next(data_confirm_statuses),
|
||||
Endpoint=1,
|
||||
- TSN=1,
|
||||
+ TSN=req.TSN,
|
||||
)
|
||||
|
||||
znp_server.reply_to(
|
||||
@@ -707,7 +771,7 @@ def data_confirm_replier(req):
|
||||
return c.AF.DataConfirm.Callback(
|
||||
Status=t.Status.MAC_TRANSACTION_EXPIRED if bad_assoc else final_status,
|
||||
Endpoint=1,
|
||||
- TSN=1,
|
||||
+ TSN=req.TSN,
|
||||
)
|
||||
|
||||
znp_server.reply_to(
|
||||
@@ -871,17 +935,16 @@ async def test_send_security_and_packet_source_route(device, make_application, m
|
||||
DstEndpoint=packet.dst_ep,
|
||||
# SrcEndpoint=packet.src_ep,
|
||||
ClusterId=packet.cluster_id,
|
||||
- TSN=packet.tsn,
|
||||
Data=packet.data.serialize(),
|
||||
SourceRoute=packet.source_route,
|
||||
partial=True,
|
||||
),
|
||||
responses=[
|
||||
c.AF.DataRequestSrcRtg.Rsp(Status=t.Status.SUCCESS),
|
||||
- c.AF.DataConfirm.Callback(
|
||||
+ lambda req: c.AF.DataConfirm.Callback(
|
||||
Status=t.Status.SUCCESS,
|
||||
Endpoint=packet.dst_ep,
|
||||
- TSN=packet.tsn,
|
||||
+ TSN=req.TSN,
|
||||
),
|
||||
],
|
||||
)
|
||||
@@ -918,10 +981,10 @@ async def test_send_packet_failure(device, make_application, mocker):
|
||||
request=c.AF.DataRequestExt.Req(partial=True),
|
||||
responses=[
|
||||
c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS),
|
||||
- c.AF.DataConfirm.Callback(
|
||||
+ lambda req: c.AF.DataConfirm.Callback(
|
||||
Status=t.Status.MAC_NO_ACK,
|
||||
Endpoint=packet.dst_ep,
|
||||
- TSN=packet.tsn,
|
||||
+ TSN=req.TSN,
|
||||
),
|
||||
],
|
||||
)
|
||||
diff --git a/tests/conftest.py b/tests/conftest.py
|
||||
index 58b2690..d2902c5 100644
|
||||
--- a/tests/conftest.py
|
||||
+++ b/tests/conftest.py
|
||||
@@ -288,6 +288,7 @@ def zdo_request_matcher(
|
||||
zdo_kwargs = {k: v for k, v in kwargs.items() if k.startswith("zdo_")}
|
||||
|
||||
kwargs = {k: v for k, v in kwargs.items() if not k.startswith("zdo_")}
|
||||
+ zdo_tsn = kwargs.pop("TSN")
|
||||
kwargs.setdefault("DstEndpoint", 0x00)
|
||||
kwargs.setdefault("DstPanId", 0x0000)
|
||||
kwargs.setdefault("SrcEndpoint", 0x00)
|
||||
@@ -297,7 +298,7 @@ def zdo_request_matcher(
|
||||
return c.AF.DataRequestExt.Req(
|
||||
DstAddrModeAddress=dst_addr,
|
||||
ClusterId=command_id,
|
||||
- Data=bytes([kwargs["TSN"]]) + serialize_zdo_command(command_id, **zdo_kwargs),
|
||||
+ Data=bytes([zdo_tsn]) + serialize_zdo_command(command_id, **zdo_kwargs),
|
||||
**kwargs,
|
||||
partial=True,
|
||||
)
|
||||
@@ -623,7 +624,7 @@ def on_zdo_mgmt_permit_joining_req(self, req, PermitDuration, TC_Significant):
|
||||
IsBroadcast=t.Bool.false,
|
||||
ClusterId=zdo_t.ZDOCmd.Mgmt_Permit_Joining_rsp,
|
||||
SecurityUse=0,
|
||||
- TSN=req.TSN,
|
||||
+ TSN=req.Data[0],
|
||||
MacDst=0x0000,
|
||||
Data=serialize_zdo_command(
|
||||
command_id=zdo_t.ZDOCmd.Mgmt_Permit_Joining_rsp,
|
||||
@@ -648,7 +649,7 @@ def on_zdo_mgmt_nwk_update_req(self, req, NwkUpdate):
|
||||
IsBroadcast=t.Bool.false,
|
||||
ClusterId=zdo_t.ZDOCmd.Mgmt_NWK_Update_rsp,
|
||||
SecurityUse=0,
|
||||
- TSN=req.TSN,
|
||||
+ TSN=req.Data[0],
|
||||
MacDst=0x0000,
|
||||
Data=serialize_zdo_command(
|
||||
command_id=zdo_t.ZDOCmd.Mgmt_NWK_Update_rsp,
|
||||
@@ -683,7 +684,7 @@ def on_zdo_active_ep_req(self, req, NWKAddrOfInterest):
|
||||
IsBroadcast=t.Bool.false,
|
||||
ClusterId=zdo_t.ZDOCmd.Active_EP_rsp,
|
||||
SecurityUse=0,
|
||||
- TSN=req.TSN,
|
||||
+ TSN=req.Data[0],
|
||||
MacDst=0x0000,
|
||||
Data=serialize_zdo_command(
|
||||
command_id=zdo_t.ZDOCmd.Active_EP_rsp,
|
||||
@@ -743,7 +744,7 @@ def on_zdo_simple_desc_req(self, req, NWKAddrOfInterest, EndPoint):
|
||||
IsBroadcast=t.Bool.false,
|
||||
ClusterId=zdo_t.ZDOCmd.Simple_Desc_rsp,
|
||||
SecurityUse=0,
|
||||
- TSN=req.TSN,
|
||||
+ TSN=req.Data[0],
|
||||
MacDst=0x0000,
|
||||
Data=serialize_zdo_command(
|
||||
command_id=zdo_t.ZDOCmd.Simple_Desc_rsp,
|
||||
@@ -1026,7 +1027,7 @@ def on_zdo_node_desc_req(self, req, NWKAddrOfInterest):
|
||||
IsBroadcast=t.Bool.false,
|
||||
ClusterId=zdo_t.ZDOCmd.Node_Desc_rsp,
|
||||
SecurityUse=0,
|
||||
- TSN=req.TSN,
|
||||
+ TSN=req.Data[0],
|
||||
MacDst=0x0000,
|
||||
Data=serialize_zdo_command(
|
||||
command_id=zdo_t.ZDOCmd.Node_Desc_rsp,
|
||||
@@ -1281,7 +1282,7 @@ def on_zdo_node_desc_req(self, req, NWKAddrOfInterest):
|
||||
IsBroadcast=t.Bool.false,
|
||||
ClusterId=zdo_t.ZDOCmd.Node_Desc_rsp,
|
||||
SecurityUse=0,
|
||||
- TSN=req.TSN,
|
||||
+ TSN=req.Data[0],
|
||||
MacDst=0x0000,
|
||||
Data=serialize_zdo_command(
|
||||
command_id=zdo_t.ZDOCmd.Node_Desc_rsp,
|
||||
diff --git a/zigpy_znp/zigbee/application.py b/zigpy_znp/zigbee/application.py
|
||||
index 30f33e4..704cd1c 100644
|
||||
--- a/zigpy_znp/zigbee/application.py
|
||||
+++ b/zigpy_znp/zigbee/application.py
|
||||
@@ -57,6 +57,13 @@ def __init__(self, config: conf.ConfigType):
|
||||
self._version_rsp = None
|
||||
self._join_announce_tasks: dict[t.EUI64, asyncio.TimerHandle] = {}
|
||||
|
||||
+ # Z-Stack only echoes the AF `TransID` back in `AF.DataConfirm`, it must be
|
||||
+ # unique among in-flight requests. The FIFO delays reuse of recent IDs.
|
||||
+ self._free_trans_ids: asyncio.Queue[int] = asyncio.Queue()
|
||||
+
|
||||
+ for trans_id in range(256):
|
||||
+ self._free_trans_ids.put_nowait(trans_id)
|
||||
+
|
||||
##################################################################
|
||||
# Implementation of the core zigpy ControllerApplication methods #
|
||||
##################################################################
|
||||
@@ -722,31 +729,6 @@ async def _send_request_raw(
|
||||
# We pick ours based on the registered endpoints when using an older firmware
|
||||
src_ep = self._find_endpoint(dst_ep=dst_ep, profile=profile, cluster=cluster)
|
||||
|
||||
- if relays is None:
|
||||
- request = c.AF.DataRequestExt.Req(
|
||||
- DstAddrModeAddress=dst_addr,
|
||||
- DstEndpoint=dst_ep or 0,
|
||||
- DstPanId=0x0000,
|
||||
- SrcEndpoint=src_ep,
|
||||
- ClusterId=cluster,
|
||||
- TSN=sequence,
|
||||
- Options=options,
|
||||
- Radius=radius,
|
||||
- Data=data,
|
||||
- )
|
||||
- else:
|
||||
- request = c.AF.DataRequestSrcRtg.Req(
|
||||
- DstAddr=dst_addr.address,
|
||||
- DstEndpoint=dst_ep or 0,
|
||||
- SrcEndpoint=src_ep,
|
||||
- ClusterId=cluster,
|
||||
- TSN=sequence,
|
||||
- Options=options,
|
||||
- Radius=radius,
|
||||
- SourceRoute=relays, # force the packet to go through specific parents
|
||||
- Data=data,
|
||||
- )
|
||||
-
|
||||
if self._znp is None:
|
||||
raise DeliveryError("Coordinator is disconnected, cannot send request")
|
||||
|
||||
@@ -810,39 +792,73 @@ async def _send_request_raw(
|
||||
)
|
||||
)
|
||||
|
||||
- if dst_ep == ZDO_ENDPOINT or dst_addr.mode == t.AddrMode.Broadcast:
|
||||
- # Broadcasts and ZDO requests will not receive a confirmation
|
||||
- await self._znp.request(request=request, RspStatus=t.Status.SUCCESS)
|
||||
- else:
|
||||
- async with asyncio.timeout(
|
||||
- EXTENDED_DATA_CONFIRM_TIMEOUT
|
||||
- if extended_timeout
|
||||
- else DATA_CONFIRM_TIMEOUT
|
||||
- ):
|
||||
- # Shield from cancellation to prevent requests that time out in higher
|
||||
- # layers from missing expected responses
|
||||
- response = await asyncio.shield(
|
||||
- self._znp.request_callback_rsp(
|
||||
- request=request,
|
||||
- RspStatus=t.Status.SUCCESS,
|
||||
- callback=c.AF.DataConfirm.Callback(
|
||||
- partial=True,
|
||||
- TSN=sequence,
|
||||
- # XXX: can this ever not match?
|
||||
- # Endpoint=src_ep,
|
||||
- ),
|
||||
- # Multicasts eventually receive a confirmation but waiting for
|
||||
- # it is unnecessary
|
||||
- background=(dst_addr.mode == t.AddrMode.Group),
|
||||
- )
|
||||
+ trans_id = await self._free_trans_ids.get()
|
||||
+ confirm_task = None
|
||||
+
|
||||
+ try:
|
||||
+ if relays is None:
|
||||
+ request = c.AF.DataRequestExt.Req(
|
||||
+ DstAddrModeAddress=dst_addr,
|
||||
+ DstEndpoint=dst_ep or 0,
|
||||
+ DstPanId=0x0000,
|
||||
+ SrcEndpoint=src_ep,
|
||||
+ ClusterId=cluster,
|
||||
+ TSN=trans_id,
|
||||
+ Options=options,
|
||||
+ Radius=radius,
|
||||
+ Data=data,
|
||||
+ )
|
||||
+ else:
|
||||
+ request = c.AF.DataRequestSrcRtg.Req(
|
||||
+ DstAddr=dst_addr.address,
|
||||
+ DstEndpoint=dst_ep or 0,
|
||||
+ SrcEndpoint=src_ep,
|
||||
+ ClusterId=cluster,
|
||||
+ TSN=trans_id,
|
||||
+ Options=options,
|
||||
+ Radius=radius,
|
||||
+ SourceRoute=relays, # force the packet through specific parents
|
||||
+ Data=data,
|
||||
)
|
||||
|
||||
- # Both the callback and the response can have an error status
|
||||
- if response.Status != t.Status.SUCCESS:
|
||||
- raise InvalidCommandResponse(
|
||||
- f"Unsuccessful request status code: {response.Status!r}",
|
||||
- response,
|
||||
- )
|
||||
+ if dst_ep == ZDO_ENDPOINT or dst_addr.mode == t.AddrMode.Broadcast:
|
||||
+ # Broadcasts and ZDO requests will not receive a confirmation
|
||||
+ await self._znp.request(request=request, RspStatus=t.Status.SUCCESS)
|
||||
+ return
|
||||
+
|
||||
+ confirm_task = asyncio.create_task(
|
||||
+ self._znp.request_callback_rsp(
|
||||
+ request=request,
|
||||
+ RspStatus=t.Status.SUCCESS,
|
||||
+ callback=c.AF.DataConfirm.Callback(partial=True, TSN=trans_id),
|
||||
+ # Multicasts eventually receive a confirmation but waiting for
|
||||
+ # it is unnecessary
|
||||
+ background=(dst_addr.mode == t.AddrMode.Group),
|
||||
+ )
|
||||
+ )
|
||||
+ finally:
|
||||
+ if confirm_task is None:
|
||||
+ self._free_trans_ids.put_nowait(trans_id)
|
||||
+ else:
|
||||
+ # The confirm listener can outlive this coroutine, keep the ID until
|
||||
+ # it is gone
|
||||
+ confirm_task.add_done_callback(
|
||||
+ lambda _: self._free_trans_ids.put_nowait(trans_id)
|
||||
+ )
|
||||
+
|
||||
+ async with asyncio.timeout(
|
||||
+ EXTENDED_DATA_CONFIRM_TIMEOUT if extended_timeout else DATA_CONFIRM_TIMEOUT
|
||||
+ ):
|
||||
+ # Shield from cancellation to prevent requests that time out in higher
|
||||
+ # layers from missing expected responses
|
||||
+ response = await asyncio.shield(confirm_task)
|
||||
+
|
||||
+ # Both the callback and the response can have an error status
|
||||
+ if response.Status != t.Status.SUCCESS:
|
||||
+ raise InvalidCommandResponse(
|
||||
+ f"Unsuccessful request status code: {response.Status!r}",
|
||||
+ response,
|
||||
+ )
|
||||
|
||||
@combine_concurrent_calls
|
||||
async def _discover_route(self, nwk: t.NWK) -> None:
|
||||
|
||||
From 2e2b8ef461c3a37df0fd0da7c742b0219fb1694f Mon Sep 17 00:00:00 2001
|
||||
From: puddly <32534428+puddly@users.noreply.github.com>
|
||||
Date: Wed, 4 Nov 2026 15:48:34 +0000
|
||||
Subject: [PATCH 2/2] Bump minimum zigpy version
|
||||
|
||||
---
|
||||
pyproject.toml | 2 +-
|
||||
tests/application/test_joining.py | 3 +++
|
||||
tests/application/test_startup.py | 5 +++--
|
||||
tests/conftest.py | 12 ++++++++++++
|
||||
4 files changed, 19 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/pyproject.toml b/pyproject.toml
|
||||
index d3153d2..f64d622 100644
|
||||
--- a/pyproject.toml
|
||||
+++ b/pyproject.toml
|
||||
@@ -14,7 +14,7 @@ readme = "README.md"
|
||||
license = {text = "GPL-3.0"}
|
||||
requires-python = ">=3.11"
|
||||
dependencies = [
|
||||
- "zigpy>=1.5.0",
|
||||
+ "zigpy>=2.4.1",
|
||||
"voluptuous",
|
||||
"coloredlogs",
|
||||
"jsonschema",
|
||||
diff --git a/tests/application/test_joining.py b/tests/application/test_joining.py
|
||||
index 886a92d..c4abc0b 100644
|
||||
--- a/tests/application/test_joining.py
|
||||
+++ b/tests/application/test_joining.py
|
||||
@@ -60,6 +60,9 @@ async def test_permit_join(device, mocker, make_application):
|
||||
)
|
||||
|
||||
await app.startup(auto_form=False)
|
||||
+
|
||||
+ # Green Power commissioning also consumes sequence numbers
|
||||
+ mocker.patch.object(app, "get_sequence", return_value=2)
|
||||
await app.permit(time_s=10)
|
||||
|
||||
await permit_join_broadcast
|
||||
diff --git a/tests/application/test_startup.py b/tests/application/test_startup.py
|
||||
index 8211bc9..fda0925 100644
|
||||
--- a/tests/application/test_startup.py
|
||||
+++ b/tests/application/test_startup.py
|
||||
@@ -103,10 +103,11 @@ async def test_endpoints(device, make_application):
|
||||
|
||||
await app.startup(auto_form=False)
|
||||
|
||||
- # We currently just register two endpoints
|
||||
- assert len(endpoints) == 2
|
||||
+ # ZHA, ZLL, and Green Power
|
||||
+ assert len(endpoints) == 3
|
||||
assert 1 in app._device.endpoints
|
||||
assert 2 in app._device.endpoints
|
||||
+ assert 242 in app._device.endpoints
|
||||
|
||||
await app.shutdown()
|
||||
|
||||
diff --git a/tests/conftest.py b/tests/conftest.py
|
||||
index d2902c5..e6566a1 100644
|
||||
--- a/tests/conftest.py
|
||||
+++ b/tests/conftest.py
|
||||
@@ -17,7 +17,9 @@
|
||||
from asynctest import CoroutineMock # type:ignore[no-redef] # noqa: F401
|
||||
|
||||
import zigpy.endpoint
|
||||
+from zigpy.zcl.clusters.greenpower import GreenPowerProxy
|
||||
import zigpy.zdo.types as zdo_t
|
||||
+import zigpy.zgp
|
||||
|
||||
from zigpy_znp.api import ZNP
|
||||
import zigpy_znp.commands as c
|
||||
@@ -595,6 +597,16 @@ def permit_join(self, request):
|
||||
c.ZDO.MgmtPermitJoinRsp.Callback(Src=0x0000, Status=t.ZDOStatus.SUCCESS),
|
||||
]
|
||||
|
||||
+ @reply_to(
|
||||
+ c.AF.DataRequestExt.Req(
|
||||
+ partial=True,
|
||||
+ DstEndpoint=zigpy.zgp.GP_ENDPOINT,
|
||||
+ ClusterId=GreenPowerProxy.cluster_id,
|
||||
+ )
|
||||
+ )
|
||||
+ def on_gp_broadcast(self, req):
|
||||
+ return [c.AF.DataRequestExt.Rsp(Status=t.Status.SUCCESS)]
|
||||
+
|
||||
@reply_to(c.AF.DataRequestExt.Req(partial=True, DstEndpoint=0))
|
||||
def on_zdo_request(self, req):
|
||||
kwargs = deserialize_zdo_command(req.ClusterId, req.Data[1:])
|
||||
@@ -24,14 +24,14 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "zigpy";
|
||||
version = "2.3.0";
|
||||
version = "2.4.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "zigpy";
|
||||
repo = "zigpy";
|
||||
tag = finalAttrs.version;
|
||||
hash = "sha256-zDwd++phuXhK5wkwV2m23KF3tu3h/n8eKjkkPZH1oDQ=";
|
||||
hash = "sha256-B0qqlnQPLJ91clfUuOeLrY8dAij1cojezQnV7J483zQ=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,6 +3,7 @@
|
||||
lib,
|
||||
callPackage,
|
||||
coreutils,
|
||||
unzip,
|
||||
fetchFromGitHub,
|
||||
fetchPypi,
|
||||
python314Packages,
|
||||
@@ -63,18 +64,6 @@ let
|
||||
];
|
||||
});
|
||||
|
||||
livisi = super.livisi.overridePythonAttrs (oldAttrs: rec {
|
||||
version = "0.0.25";
|
||||
src = fetchFromGitHub {
|
||||
owner = "planbnet";
|
||||
repo = "livisi";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-kEkbuZmYzxhrbTdo7eZJYu2N2uJtfspgqepplXvSXFg=";
|
||||
};
|
||||
});
|
||||
|
||||
mcp = self.mcp_1;
|
||||
|
||||
notifications-android-tv = super.notifications-android-tv.overridePythonAttrs (oldAttrs: rec {
|
||||
version = "0.1.5";
|
||||
format = "setuptools";
|
||||
@@ -122,10 +111,12 @@ let
|
||||
|
||||
# internal python packages only consumed by home-assistant itself
|
||||
gazetteer-matcher = self.callPackage ./python-modules/gazetteer-matcher { };
|
||||
hassfest = self.callPackage ./python-modules/hassfest { };
|
||||
hass-web-proxy-lib = self.callPackage ./python-modules/hass-web-proxy-lib { };
|
||||
home-assistant-frontend = self.callPackage ./frontend.nix { };
|
||||
home-assistant-intents = self.callPackage ./intents.nix { };
|
||||
homeassistant = self.toPythonModule home-assistant;
|
||||
pytest-homeassistant = self.callPackage ./python-modules/pytest-homeassistant { };
|
||||
pytest-homeassistant-custom-component =
|
||||
self.callPackage ./pytest-homeassistant-custom-component.nix
|
||||
{ };
|
||||
@@ -152,7 +143,7 @@ let
|
||||
extraBuildInputs = extraPackages python3Packages;
|
||||
|
||||
# Don't forget to run update-component-packages.py after updating
|
||||
hassVersion = "2026.10.4";
|
||||
hassVersion = "2026.11.0";
|
||||
|
||||
in
|
||||
python3Packages.buildPythonApplication rec {
|
||||
@@ -173,28 +164,38 @@ python3Packages.buildPythonApplication rec {
|
||||
owner = "home-assistant";
|
||||
repo = "core";
|
||||
tag = version;
|
||||
hash = "sha256-RMjpLX8zFslvCkR6jYeinBpbKKYdiC+gdff90S4Dz4w=";
|
||||
hash = "sha256-NYGt64VZiAZSVViO6pgjx7fBk9YgIDMDmKLNSFVsw6Q=";
|
||||
};
|
||||
|
||||
# Secondary source is pypi sdist for translations
|
||||
sdist = fetchPypi {
|
||||
# Secondary source is pypi wheel for translations
|
||||
wheel = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-hBD+y0NKuUs/dyTNgFhAUPDO64VsFu5wICwkA31iI4o=";
|
||||
hash = "sha256-fKX73p3qh5rHcjlJ/IQ0eqxRguYwnDV7Lklz/TkbAPc=";
|
||||
format = "wheel";
|
||||
dist = "py3";
|
||||
python = "py3";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
unzip
|
||||
];
|
||||
|
||||
build-system = with python3Packages; [
|
||||
setuptools
|
||||
];
|
||||
|
||||
pythonRelaxDeps = true;
|
||||
|
||||
# extract translations from pypi sdist
|
||||
# extract translations from wheel
|
||||
prePatch = ''
|
||||
tar --extract --gzip --file $sdist --strip-components 1 --wildcards "**/translations"
|
||||
unzip "$wheel" '**/translations/*' -d .
|
||||
'';
|
||||
|
||||
# leave this in, so users don't have to constantly update their downstream patch handling
|
||||
patches = [
|
||||
# Skip environment check
|
||||
./patches/skip-environment-check.patch
|
||||
|
||||
# Follow symlinks in /var/lib/hass/www
|
||||
./patches/static-follow-symlinks.patch
|
||||
|
||||
@@ -260,7 +261,7 @@ python3Packages.buildPythonApplication rec {
|
||||
hass-nabucasa
|
||||
home-assistant-bluetooth
|
||||
home-assistant-intents
|
||||
httpx
|
||||
httpx2
|
||||
ifaddr
|
||||
infrared-protocols
|
||||
jinja2
|
||||
@@ -275,6 +276,7 @@ python3Packages.buildPythonApplication rec {
|
||||
pyjwt
|
||||
pymicro-vad
|
||||
pyopenssl
|
||||
pyserial
|
||||
pyspeex-noise
|
||||
python-slugify
|
||||
pyturbojpeg
|
||||
@@ -285,6 +287,7 @@ python3Packages.buildPythonApplication rec {
|
||||
sqlalchemy
|
||||
standard-aifc
|
||||
standard-telnetlib
|
||||
truststore
|
||||
typing-extensions
|
||||
ulid-transform
|
||||
urllib3
|
||||
@@ -306,10 +309,13 @@ python3Packages.buildPythonApplication rec {
|
||||
|
||||
requirementsTest = with python3Packages; [
|
||||
# test infrastructure (selectively from requirement_test.txt)
|
||||
hassfest
|
||||
pytest-homeassistant
|
||||
freezegun
|
||||
pytest-asyncio
|
||||
pytest-aiohttp
|
||||
pytest-freezer
|
||||
pytest-homeassistant
|
||||
pytest-socket
|
||||
pytest-timeout
|
||||
pytest-unordered
|
||||
@@ -357,10 +363,9 @@ python3Packages.buildPythonApplication rec {
|
||||
];
|
||||
|
||||
disabledTestPaths = [
|
||||
# we neither run nor distribute hassfest
|
||||
"tests/hassfest"
|
||||
# we don't care about code quality
|
||||
"tests/pylint"
|
||||
"tests/script"
|
||||
# redundant component import test, which would make debugpy & sentry expensive to review
|
||||
"tests/test_circular_imports.py"
|
||||
# don't bulk test all components
|
||||
|
||||
@@ -8,7 +8,7 @@ buildPythonPackage (finalAttrs: {
|
||||
# the frontend version corresponding to a specific home-assistant version can be found here
|
||||
# https://github.com/home-assistant/home-assistant/blob/master/homeassistant/components/frontend/manifest.json
|
||||
pname = "home-assistant-frontend";
|
||||
version = "20260930.5";
|
||||
version = "20261028.4";
|
||||
format = "wheel";
|
||||
|
||||
src = fetchPypi {
|
||||
@@ -17,7 +17,7 @@ buildPythonPackage (finalAttrs: {
|
||||
pname = "home_assistant_frontend";
|
||||
dist = "py3";
|
||||
python = "py3";
|
||||
hash = "sha256-nMA7PSpD6TxuV8wgsyLJjM5hvno118HfECHiedItH5s=";
|
||||
hash = "sha256-5eWbguY7KIMj01iGJy8uSQ7mL2x6qixW5+9F4wDUR1c=";
|
||||
};
|
||||
|
||||
# there is nothing to strip in this package
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
buildPythonPackage (finalAttrs: {
|
||||
pname = "home-assistant-intents";
|
||||
version = "2026.10.6";
|
||||
version = "2026.10.27";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
@@ -29,7 +29,7 @@ buildPythonPackage (finalAttrs: {
|
||||
repo = "intents-package";
|
||||
tag = finalAttrs.version;
|
||||
fetchSubmodules = true;
|
||||
hash = "sha256-AJepd3qp8pvpWRo8MytSm7jUsEW5QeLJWcjMRXs9Zwg=";
|
||||
hash = "sha256-aXGTo7is/EvXlCDws5UcCFZ4Clye9yLUIl/MOz7IOI4=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
diff --git a/homeassistant/__main__.py b/homeassistant/__main__.py
|
||||
index 8a7772fcc27..ea8bb79536d 100644
|
||||
--- a/homeassistant/__main__.py
|
||||
+++ b/homeassistant/__main__.py
|
||||
@@ -16,13 +16,6 @@ FAULT_LOG_FILENAME = "home-assistant.log.fault"
|
||||
|
||||
def validate_environment() -> None:
|
||||
"""Validate that Home Assistant is started from a container or a venv."""
|
||||
- if not is_virtual_env() and not is_docker_env():
|
||||
- print(
|
||||
- "Home Assistant must be run in a Python virtual environment or a container.",
|
||||
- file=sys.stderr,
|
||||
- )
|
||||
- sys.exit(1)
|
||||
-
|
||||
|
||||
def validate_os() -> None:
|
||||
"""Validate that Home Assistant is running in a supported operating system."""
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
buildPythonPackage,
|
||||
home-assistant,
|
||||
|
||||
# build-system
|
||||
setuptools,
|
||||
|
||||
# tests
|
||||
pytestCheckHook,
|
||||
ruff,
|
||||
}:
|
||||
|
||||
buildPythonPackage {
|
||||
pname = "hassfest";
|
||||
pyproject = true;
|
||||
|
||||
inherit (home-assistant) version src;
|
||||
|
||||
sourceRoot = "${home-assistant.src.name}/packages/hassfest";
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
pythonImportsCheck = [ "hassfest" ];
|
||||
|
||||
nativeCheckInputs = [
|
||||
pytestCheckHook
|
||||
ruff
|
||||
];
|
||||
|
||||
meta = home-assistant.meta // {
|
||||
description = "Validate Home Asisstant integrations";
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
{
|
||||
buildPythonPackage,
|
||||
home-assistant,
|
||||
pyprojectVersionPatchHook,
|
||||
|
||||
# build-system
|
||||
setuptools,
|
||||
|
||||
# dependencies
|
||||
bleak-retry-connector,
|
||||
freezegun,
|
||||
paho-mqtt,
|
||||
pytest,
|
||||
pytest-aiohttp,
|
||||
pytest-asyncio,
|
||||
pytest-freezer,
|
||||
pytest-socket,
|
||||
pytest-xdist,
|
||||
requests-mock,
|
||||
respx,
|
||||
syrupy,
|
||||
|
||||
# optional-dependencies
|
||||
aiohasupervisor,
|
||||
aiousbwatcher,
|
||||
bluetooth-adapters,
|
||||
bluetooth-auto-recovery,
|
||||
bluetooth-data-tools,
|
||||
habluetooth,
|
||||
serialx,
|
||||
infrared-protocols,
|
||||
rf-protocols,
|
||||
}:
|
||||
|
||||
buildPythonPackage {
|
||||
pname = "pytest-homeassistant";
|
||||
pyproject = true;
|
||||
|
||||
inherit (home-assistant) version src;
|
||||
|
||||
sourceRoot = "${home-assistant.src.name}/packages/pytest-homeassistant";
|
||||
|
||||
nativeBuildInputs = [ pyprojectVersionPatchHook ];
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
bleak-retry-connector
|
||||
freezegun
|
||||
paho-mqtt
|
||||
pytest
|
||||
pytest-aiohttp
|
||||
pytest-asyncio
|
||||
pytest-freezer
|
||||
pytest-socket
|
||||
pytest-xdist
|
||||
requests-mock
|
||||
respx
|
||||
syrupy
|
||||
];
|
||||
|
||||
pythonRelaxDeps = [
|
||||
"pytest"
|
||||
"syrupy"
|
||||
];
|
||||
|
||||
pythonRemoveDeps = [ "homeassistant" ]; # circular
|
||||
|
||||
optional-dependencies = {
|
||||
bluetooth = [
|
||||
aiohasupervisor
|
||||
aiousbwatcher
|
||||
bluetooth-adapters
|
||||
bluetooth-auto-recovery
|
||||
bluetooth-data-tools
|
||||
habluetooth
|
||||
serialx
|
||||
];
|
||||
infrared = [
|
||||
infrared-protocols
|
||||
];
|
||||
radio-frequency = [
|
||||
rf-protocols
|
||||
];
|
||||
};
|
||||
|
||||
meta = home-assistant.meta // {
|
||||
description = "Pytest fixtures and test helpers for Home Assistant";
|
||||
};
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user