mirror of
				https://github.com/home-assistant/supervisor.git
				synced 2025-11-04 08:29:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Init file for Hass.io HassOS RESTful API."""
 | 
						|
import asyncio
 | 
						|
import logging
 | 
						|
from typing import Any, Awaitable, Dict
 | 
						|
 | 
						|
from aiohttp import web
 | 
						|
import voluptuous as vol
 | 
						|
 | 
						|
from ..const import (
 | 
						|
    ATTR_BOARD,
 | 
						|
    ATTR_BOOT,
 | 
						|
    ATTR_VERSION,
 | 
						|
    ATTR_VERSION_CLI,
 | 
						|
    ATTR_VERSION_CLI_LATEST,
 | 
						|
    ATTR_VERSION_LATEST,
 | 
						|
)
 | 
						|
from ..coresys import CoreSysAttributes
 | 
						|
from .utils import api_process, api_validate
 | 
						|
 | 
						|
_LOGGER: logging.Logger = logging.getLogger(__name__)
 | 
						|
 | 
						|
SCHEMA_VERSION = vol.Schema({vol.Optional(ATTR_VERSION): vol.Coerce(str)})
 | 
						|
 | 
						|
 | 
						|
class APIHassOS(CoreSysAttributes):
 | 
						|
    """Handle RESTful API for HassOS functions."""
 | 
						|
 | 
						|
    @api_process
 | 
						|
    async def info(self, request: web.Request) -> Dict[str, Any]:
 | 
						|
        """Return HassOS information."""
 | 
						|
        return {
 | 
						|
            ATTR_VERSION: self.sys_hassos.version,
 | 
						|
            ATTR_VERSION_CLI: self.sys_hassos.version_cli,
 | 
						|
            ATTR_VERSION_LATEST: self.sys_hassos.version_latest,
 | 
						|
            ATTR_VERSION_CLI_LATEST: self.sys_hassos.version_cli_latest,
 | 
						|
            ATTR_BOARD: self.sys_hassos.board,
 | 
						|
            ATTR_BOOT: self.sys_dbus.rauc.boot_slot,
 | 
						|
        }
 | 
						|
 | 
						|
    @api_process
 | 
						|
    async def update(self, request: web.Request) -> None:
 | 
						|
        """Update HassOS."""
 | 
						|
        body = await api_validate(SCHEMA_VERSION, request)
 | 
						|
        version = body.get(ATTR_VERSION, self.sys_hassos.version_latest)
 | 
						|
 | 
						|
        await asyncio.shield(self.sys_hassos.update(version))
 | 
						|
 | 
						|
    @api_process
 | 
						|
    async def update_cli(self, request: web.Request) -> None:
 | 
						|
        """Update HassOS CLI."""
 | 
						|
        body = await api_validate(SCHEMA_VERSION, request)
 | 
						|
        version = body.get(ATTR_VERSION, self.sys_hassos.version_cli_latest)
 | 
						|
 | 
						|
        await asyncio.shield(self.sys_hassos.update_cli(version))
 | 
						|
 | 
						|
    @api_process
 | 
						|
    def config_sync(self, request: web.Request) -> Awaitable[None]:
 | 
						|
        """Trigger config reload on HassOS."""
 | 
						|
        return asyncio.shield(self.sys_hassos.config_sync())
 |