Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions aiohasupervisor/addons.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
AddonsConfigValidate,
AddonsList,
AddonsOptions,
AddonsRebuild,
AddonsSecurityOptions,
AddonsStats,
AddonsUninstall,
Expand Down Expand Up @@ -75,9 +76,16 @@ async def addon_config(self, addon: str) -> dict[str, Any]:
result = await self._client.get(f"addons/{addon}/options/config")
return result.data

async def rebuild_addon(self, addon: str) -> None:
async def rebuild_addon(
self,
addon: str,
options: AddonsRebuild | None = None,
) -> None:
"""Rebuild an addon (only available for local addons built from source)."""
await self._client.post(f"addons/{addon}/rebuild")
await self._client.post(
f"addons/{addon}/rebuild",
json=options.to_dict() if options else None,
)

async def write_addon_stdin(self, addon: str, stdin: bytes) -> None:
"""Write to stdin of an addon (if supported by addon)."""
Expand Down
2 changes: 2 additions & 0 deletions aiohasupervisor/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
AddonBootConfig,
AddonsConfigValidate,
AddonsOptions,
AddonsRebuild,
AddonsSecurityOptions,
AddonsStats,
AddonStage,
Expand Down Expand Up @@ -173,6 +174,7 @@
"InstalledAddonComplete",
"AddonsOptions",
"AddonsConfigValidate",
"AddonsRebuild",
"AddonsSecurityOptions",
"AddonsStats",
"AddonsUninstall",
Expand Down
7 changes: 7 additions & 0 deletions aiohasupervisor/models/addons.py
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,13 @@ class AddonsUninstall(Request):
remove_config: bool | None = None


@dataclass(frozen=True, slots=True)
class AddonsRebuild(Request):
"""AddonsRebuild model."""

force: bool | None = None


@dataclass(frozen=True, slots=True)
class Repository(ResponseData):
"""Repository model."""
Expand Down
20 changes: 20 additions & 0 deletions tests/test_addons.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from aiohasupervisor.models import (
AddonBoot,
AddonsOptions,
AddonsRebuild,
AddonsSecurityOptions,
AddonStage,
AddonStartup,
Expand Down Expand Up @@ -193,6 +194,25 @@ async def test_addons_rebuild(
}


async def test_addons_rebuild_with_force(
responses: aioresponses, supervisor_client: SupervisorClient
) -> None:
"""Test rebuild addon API with force option."""
responses.post(f"{SUPERVISOR_URL}/addons/local_example/rebuild", status=200)
assert (
await supervisor_client.addons.rebuild_addon(
"local_example", AddonsRebuild(force=True)
)
is None
)

request_key = ("POST", URL(f"{SUPERVISOR_URL}/addons/local_example/rebuild"))
assert request_key in responses.requests

request_call = responses.requests[request_key][0]
assert request_call.kwargs["json"] == {"force": True}


async def test_addons_stdin(
responses: aioresponses, supervisor_client: SupervisorClient
) -> None:
Expand Down