mirror of
				https://github.com/home-assistant/supervisor.git
				synced 2025-11-04 00:19:36 +00:00 
			
		
		
		
	* Improve gdbus error handling * Fix logging type * Detect no dbus * Fix issue with complex * Update hassio/dbus/__init__.py Co-Authored-By: Franck Nijhof <frenck@frenck.nl> * Update hassio/dbus/hostname.py Co-Authored-By: Franck Nijhof <frenck@frenck.nl> * Update hassio/dbus/rauc.py Co-Authored-By: Franck Nijhof <frenck@frenck.nl> * Update hassio/dbus/systemd.py Co-Authored-By: Franck Nijhof <frenck@frenck.nl> * Fix black
		
			
				
	
	
		
			110 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Init file for Hass.io host RESTful API."""
 | 
						|
import asyncio
 | 
						|
import logging
 | 
						|
 | 
						|
import voluptuous as vol
 | 
						|
 | 
						|
from .utils import api_process, api_validate
 | 
						|
from ..const import (
 | 
						|
    ATTR_HOSTNAME,
 | 
						|
    ATTR_FEATURES,
 | 
						|
    ATTR_KERNEL,
 | 
						|
    ATTR_OPERATING_SYSTEM,
 | 
						|
    ATTR_CHASSIS,
 | 
						|
    ATTR_DEPLOYMENT,
 | 
						|
    ATTR_STATE,
 | 
						|
    ATTR_NAME,
 | 
						|
    ATTR_DESCRIPTON,
 | 
						|
    ATTR_SERVICES,
 | 
						|
    ATTR_CPE,
 | 
						|
)
 | 
						|
from ..coresys import CoreSysAttributes
 | 
						|
 | 
						|
_LOGGER: logging.Logger = logging.getLogger(__name__)
 | 
						|
 | 
						|
SERVICE = "service"
 | 
						|
 | 
						|
SCHEMA_OPTIONS = vol.Schema({vol.Optional(ATTR_HOSTNAME): vol.Coerce(str)})
 | 
						|
 | 
						|
 | 
						|
class APIHost(CoreSysAttributes):
 | 
						|
    """Handle RESTful API for host functions."""
 | 
						|
 | 
						|
    @api_process
 | 
						|
    async def info(self, request):
 | 
						|
        """Return host information."""
 | 
						|
        return {
 | 
						|
            ATTR_CHASSIS: self.sys_host.info.chassis,
 | 
						|
            ATTR_CPE: self.sys_host.info.cpe,
 | 
						|
            ATTR_FEATURES: self.sys_host.supperted_features,
 | 
						|
            ATTR_HOSTNAME: self.sys_host.info.hostname,
 | 
						|
            ATTR_OPERATING_SYSTEM: self.sys_host.info.operating_system,
 | 
						|
            ATTR_DEPLOYMENT: self.sys_host.info.deployment,
 | 
						|
            ATTR_KERNEL: self.sys_host.info.kernel,
 | 
						|
        }
 | 
						|
 | 
						|
    @api_process
 | 
						|
    async def options(self, request):
 | 
						|
        """Edit host settings."""
 | 
						|
        body = await api_validate(SCHEMA_OPTIONS, request)
 | 
						|
 | 
						|
        # hostname
 | 
						|
        if ATTR_HOSTNAME in body:
 | 
						|
            await asyncio.shield(
 | 
						|
                self.sys_host.control.set_hostname(body[ATTR_HOSTNAME])
 | 
						|
            )
 | 
						|
 | 
						|
    @api_process
 | 
						|
    def reboot(self, request):
 | 
						|
        """Reboot host."""
 | 
						|
        return asyncio.shield(self.sys_host.control.reboot())
 | 
						|
 | 
						|
    @api_process
 | 
						|
    def shutdown(self, request):
 | 
						|
        """Poweroff host."""
 | 
						|
        return asyncio.shield(self.sys_host.control.shutdown())
 | 
						|
 | 
						|
    @api_process
 | 
						|
    def reload(self, request):
 | 
						|
        """Reload host data."""
 | 
						|
        return asyncio.shield(self.sys_host.reload())
 | 
						|
 | 
						|
    @api_process
 | 
						|
    async def services(self, request):
 | 
						|
        """Return list of available services."""
 | 
						|
        services = []
 | 
						|
        for unit in self.sys_host.services:
 | 
						|
            services.append(
 | 
						|
                {
 | 
						|
                    ATTR_NAME: unit.name,
 | 
						|
                    ATTR_DESCRIPTON: unit.description,
 | 
						|
                    ATTR_STATE: unit.state,
 | 
						|
                }
 | 
						|
            )
 | 
						|
 | 
						|
        return {ATTR_SERVICES: services}
 | 
						|
 | 
						|
    @api_process
 | 
						|
    def service_start(self, request):
 | 
						|
        """Start a service."""
 | 
						|
        unit = request.match_info.get(SERVICE)
 | 
						|
        return asyncio.shield(self.sys_host.services.start(unit))
 | 
						|
 | 
						|
    @api_process
 | 
						|
    def service_stop(self, request):
 | 
						|
        """Stop a service."""
 | 
						|
        unit = request.match_info.get(SERVICE)
 | 
						|
        return asyncio.shield(self.sys_host.services.stop(unit))
 | 
						|
 | 
						|
    @api_process
 | 
						|
    def service_reload(self, request):
 | 
						|
        """Reload a service."""
 | 
						|
        unit = request.match_info.get(SERVICE)
 | 
						|
        return asyncio.shield(self.sys_host.services.reload(unit))
 | 
						|
 | 
						|
    @api_process
 | 
						|
    def service_restart(self, request):
 | 
						|
        """Restart a service."""
 | 
						|
        unit = request.match_info.get(SERVICE)
 | 
						|
        return asyncio.shield(self.sys_host.services.restart(unit))
 |