diff --git a/pkgs/development/python-modules/aiopvapi/default.nix b/pkgs/development/python-modules/aiopvapi/default.nix index 675da1226bac..7f7feec0ab49 100644 --- a/pkgs/development/python-modules/aiopvapi/default.nix +++ b/pkgs/development/python-modules/aiopvapi/default.nix @@ -19,6 +19,11 @@ buildPythonPackage rec { hash = "sha256-yystaH2HRsJoYh2aTpOBA7DLiC2xwpBUccHwmJ0FlaY="; }; + patches = [ + # https://github.com/sander76/aio-powerview-api/pull/46 + ./fix-tests.patch + ]; + build-system = [ setuptools ]; dependencies = [ aiohttp ]; @@ -27,11 +32,6 @@ buildPythonPackage rec { pythonImportsCheck = [ "aiopvapi" ]; - disabledTests = [ - # AssertionError - "test_remove_shade_from_scene" - ]; - meta = { description = "Python API for the PowerView API"; homepage = "https://github.com/sander76/aio-powerview-api"; diff --git a/pkgs/development/python-modules/aiopvapi/fix-tests.patch b/pkgs/development/python-modules/aiopvapi/fix-tests.patch new file mode 100644 index 000000000000..ceadf8d60244 --- /dev/null +++ b/pkgs/development/python-modules/aiopvapi/fix-tests.patch @@ -0,0 +1,114 @@ +From 13b4b685de1ad6c4cb518d751150c573e4edeff7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= +Date: Thu, 5 Mar 2026 03:07:15 +0100 +Subject: [PATCH 1/2] Fix test fixture + +Closes #39 +--- + tests/test_scene_members.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/tests/test_scene_members.py b/tests/test_scene_members.py +index e137396..18452fb 100644 +--- a/tests/test_scene_members.py ++++ b/tests/test_scene_members.py +@@ -39,4 +39,5 @@ async def go(): + _del_mock.mock.assert_called_once_with( + 'http://{}/api/scenemembers'.format(self.fake_ip), + params={"sceneId": 5678, +- 'shadeId': 1234}) ++ 'shadeId': 1234}, ++ timeout=15) + +From 51f813eca4566cf08ab36d60ce693cade92cea28 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= +Date: Thu, 5 Mar 2026 03:07:28 +0100 +Subject: [PATCH 2/2] Fix Python 3.14 compatibility + +--- + aiopvapi/helpers/aiorequest.py | 4 ++-- + tests/fake_server.py | 4 ++-- + tests/test_room.py | 2 +- + tests/test_scene.py | 2 +- + tests/test_scene_members.py | 2 +- + 5 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/aiopvapi/helpers/aiorequest.py b/aiopvapi/helpers/aiorequest.py +index 9fcb7df..b2b7b3a 100644 +--- a/aiopvapi/helpers/aiorequest.py ++++ b/aiopvapi/helpers/aiorequest.py +@@ -45,11 +45,11 @@ def __init__( + if loop: + self.loop = loop + else: +- self.loop = asyncio.get_event_loop() ++ self.loop = asyncio.new_event_loop() + if websession: + self.websession = websession + else: +- self.websession = aiohttp.ClientSession() ++ self.websession = aiohttp.ClientSession(loop=self.loop) + self.api_version: int | None = api_version + self._last_request_status: int = 0 + _LOGGER.debug("Powerview api version: %s", self.api_version) +diff --git a/tests/fake_server.py b/tests/fake_server.py +index f9d3803..e8e5b9e 100644 +--- a/tests/fake_server.py ++++ b/tests/fake_server.py +@@ -355,7 +355,7 @@ async def main(loop, api_version=2): + + + if __name__ == "__main__": +- loop = asyncio.get_event_loop() ++ loop = asyncio.new_event_loop() + loop.run_until_complete(main(loop)) + + +@@ -365,7 +365,7 @@ def __init__(self, methodName: str = "runTest") -> None: + self.api_version = 2 + + def setUp(self): +- self.loop = asyncio.get_event_loop() ++ self.loop = asyncio.new_event_loop() + self.server = FakePowerViewHub(loop=self.loop, api_version=self.api_version) + self.request = None + +diff --git a/tests/test_room.py b/tests/test_room.py +index 58b0bc9..2ffd51b 100644 +--- a/tests/test_room.py ++++ b/tests/test_room.py +@@ -62,7 +62,7 @@ async def go(): + await self.start_fake_server() + # room = self.get_resource() + +- loop = asyncio.get_event_loop() ++ loop = asyncio.new_event_loop() + request = AioRequest(FAKE_BASE_URL, loop, api_version=2) + + response = Mock(spec=ClientResponse) +diff --git a/tests/test_scene.py b/tests/test_scene.py +index e7f2212..904f605 100644 +--- a/tests/test_scene.py ++++ b/tests/test_scene.py +@@ -68,7 +68,7 @@ async def go(): + await self.start_fake_server() + # scene = self.get_resource() + +- loop = asyncio.get_event_loop() ++ loop = asyncio.new_event_loop() + request = AioRequest(FAKE_BASE_URL, loop, api_version=2) + + response = Mock(spec=ClientResponse) +diff --git a/tests/test_scene_members.py b/tests/test_scene_members.py +index 18452fb..10ca437 100644 +--- a/tests/test_scene_members.py ++++ b/tests/test_scene_members.py +@@ -24,7 +24,7 @@ def setUp(self): + @mock.patch('aiopvapi.helpers.aiorequest.AioRequest.check_response', new=AsyncMock()) + def test_remove_shade_from_scene(self): + """Tests create new scene.""" +- loop = asyncio.get_event_loop() ++ loop = asyncio.new_event_loop() + request = AioRequest(self.fake_ip, loop) + + _del_mock = AsyncMock(return_value=None)