1 """Implement the Ingress Panel feature for Hass.io Add-ons."""
3 from http
import HTTPStatus
7 from aiohttp
import web
14 from .const
import ATTR_ADMIN, ATTR_ENABLE, ATTR_PANELS, ATTR_TITLE
15 from .handler
import HassIO, HassioAPIError
17 _LOGGER = logging.getLogger(__name__)
21 """Add-on Ingress Panel setup."""
23 hass.http.register_view(hassio_addon_panel)
26 if not (panels := await hassio_addon_panel.get_panels()):
30 for addon, data
in panels.items():
31 if not data[ATTR_ENABLE]:
40 """Hass.io view to handle base part."""
42 name =
"api:hassio_push:panel"
43 url =
"/api/hassio_push/panel/{addon}"
45 def __init__(self, hass: HomeAssistant, hassio: HassIO) ->
None:
46 """Initialize WebView."""
50 async
def post(self, request: web.Request, addon: str) -> web.Response:
51 """Handle new add-on panel requests."""
55 if addon
not in panels
or not panels[addon][ATTR_ENABLE]:
56 _LOGGER.error(
"Panel is not enable for %s", addon)
57 return web.Response(status=HTTPStatus.BAD_REQUEST)
64 async
def delete(self, request: web.Request, addon: str) -> web.Response:
65 """Handle remove add-on panel requests."""
66 frontend.async_remove_panel(self.
hasshass, addon)
70 """Return panels add-on info data."""
72 data = await self.
hassiohassio.get_ingress_panels()
73 return data[ATTR_PANELS]
74 except HassioAPIError
as err:
75 _LOGGER.error(
"Can't read panel info: %s", err)
80 hass: HomeAssistant, addon: str, data: dict[str, Any]
82 """Init coroutine to register the panel."""
83 await panel_custom.async_register_panel(
85 frontend_url_path=addon,
86 webcomponent_name=
"hassio-main",
87 sidebar_title=data[ATTR_TITLE],
88 sidebar_icon=data[ATTR_ICON],
89 js_url=
"/api/hassio/app/entrypoint.js",
91 require_admin=data[ATTR_ADMIN],
92 config={
"ingress": addon},
None __init__(self, HomeAssistant hass, HassIO hassio)
web.Response delete(self, web.Request request, str addon)
web.Response post(self, web.Request request, str addon)
None async_setup_addon_panel(HomeAssistant hass, HassIO hassio)
None _register_panel(HomeAssistant hass, str addon, dict[str, Any] data)