Skip to content

Commit f6aebe6

Browse files
authored
Add force option to rebuild_addon method (#133)
1 parent 0f6a946 commit f6aebe6

File tree

4 files changed

+39
-2
lines changed

4 files changed

+39
-2
lines changed

aiohasupervisor/addons.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
AddonsConfigValidate,
99
AddonsList,
1010
AddonsOptions,
11+
AddonsRebuild,
1112
AddonsSecurityOptions,
1213
AddonsStats,
1314
AddonsUninstall,
@@ -75,9 +76,16 @@ async def addon_config(self, addon: str) -> dict[str, Any]:
7576
result = await self._client.get(f"addons/{addon}/options/config")
7677
return result.data
7778

78-
async def rebuild_addon(self, addon: str) -> None:
79+
async def rebuild_addon(
80+
self,
81+
addon: str,
82+
options: AddonsRebuild | None = None,
83+
) -> None:
7984
"""Rebuild an addon (only available for local addons built from source)."""
80-
await self._client.post(f"addons/{addon}/rebuild")
85+
await self._client.post(
86+
f"addons/{addon}/rebuild",
87+
json=options.to_dict() if options else None,
88+
)
8189

8290
async def write_addon_stdin(self, addon: str, stdin: bytes) -> None:
8391
"""Write to stdin of an addon (if supported by addon)."""

aiohasupervisor/models/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
AddonBootConfig,
66
AddonsConfigValidate,
77
AddonsOptions,
8+
AddonsRebuild,
89
AddonsSecurityOptions,
910
AddonsStats,
1011
AddonStage,
@@ -173,6 +174,7 @@
173174
"InstalledAddonComplete",
174175
"AddonsOptions",
175176
"AddonsConfigValidate",
177+
"AddonsRebuild",
176178
"AddonsSecurityOptions",
177179
"AddonsStats",
178180
"AddonsUninstall",

aiohasupervisor/models/addons.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,13 @@ class AddonsUninstall(Request):
320320
remove_config: bool | None = None
321321

322322

323+
@dataclass(frozen=True, slots=True)
324+
class AddonsRebuild(Request):
325+
"""AddonsRebuild model."""
326+
327+
force: bool | None = None
328+
329+
323330
@dataclass(frozen=True, slots=True)
324331
class Repository(ResponseData):
325332
"""Repository model."""

tests/test_addons.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from aiohasupervisor.models import (
1010
AddonBoot,
1111
AddonsOptions,
12+
AddonsRebuild,
1213
AddonsSecurityOptions,
1314
AddonStage,
1415
AddonStartup,
@@ -193,6 +194,25 @@ async def test_addons_rebuild(
193194
}
194195

195196

197+
async def test_addons_rebuild_with_force(
198+
responses: aioresponses, supervisor_client: SupervisorClient
199+
) -> None:
200+
"""Test rebuild addon API with force option."""
201+
responses.post(f"{SUPERVISOR_URL}/addons/local_example/rebuild", status=200)
202+
assert (
203+
await supervisor_client.addons.rebuild_addon(
204+
"local_example", AddonsRebuild(force=True)
205+
)
206+
is None
207+
)
208+
209+
request_key = ("POST", URL(f"{SUPERVISOR_URL}/addons/local_example/rebuild"))
210+
assert request_key in responses.requests
211+
212+
request_call = responses.requests[request_key][0]
213+
assert request_call.kwargs["json"] == {"force": True}
214+
215+
196216
async def test_addons_stdin(
197217
responses: aioresponses, supervisor_client: SupervisorClient
198218
) -> None:

0 commit comments

Comments
 (0)