From 9d88255225131d3faab98958944aabb89a21a460 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sat, 22 Jul 2017 22:34:25 +0200 Subject: [PATCH] API cleanup (#106) * API cleanup * fix lint * fix wrong return * fix snapshots/reload * cleanup * fix lint * fix lint --- API.md | 10 ++---- hassio/api/__init__.py | 2 -- hassio/api/addons.py | 5 +-- hassio/api/snapshots.py | 5 +-- hassio/api/supervisor.py | 69 +++++++++++----------------------------- 5 files changed, 27 insertions(+), 64 deletions(-) diff --git a/API.md b/API.md index 47446a8b1..7dcc6a304 100644 --- a/API.md +++ b/API.md @@ -40,13 +40,11 @@ The addons from `addons` are only installed one. "name": "xy bla", "slug": "xy", "description": "description", - "arch": ["armhf", "aarch64", "i386", "amd64"], "repository": "12345678|null", "version": "LAST_VERSION", "installed": "INSTALL_VERSION", - "detached": "bool", - "build": "bool", - "url": "null|url" + "logo": "bool", + "state": "started|stopped", } ], "addons_repositories": [ @@ -55,10 +53,6 @@ The addons from `addons` are only installed one. } ``` -- GET `/supervisor/addons` - -Get all available addons. Will be delete soon. Look to `/addons` - - POST `/supervisor/update` Optional: ```json diff --git a/hassio/api/__init__.py b/hassio/api/__init__.py index f09dd0b43..2d5c0110a 100644 --- a/hassio/api/__init__.py +++ b/hassio/api/__init__.py @@ -53,8 +53,6 @@ class RestAPI(object): self.webapp.router.add_get('/supervisor/ping', api_supervisor.ping) self.webapp.router.add_get('/supervisor/info', api_supervisor.info) - self.webapp.router.add_get( - '/supervisor/addons', api_supervisor.available_addons) self.webapp.router.add_post( '/supervisor/update', api_supervisor.update) self.webapp.router.add_post( diff --git a/hassio/api/addons.py b/hassio/api/addons.py index 7298f4718..08925ad71 100644 --- a/hassio/api/addons.py +++ b/hassio/api/addons.py @@ -84,9 +84,10 @@ class APIAddons(object): } @api_process - def reload(self, request): + async def reload(self, request): """Reload all addons data.""" - return self.addons.reload() + await asyncio.shield(self.addons.reload(), loop=self.loop) + return True @api_process async def info(self, request): diff --git a/hassio/api/snapshots.py b/hassio/api/snapshots.py index e79d3a2e7..494586fd3 100644 --- a/hassio/api/snapshots.py +++ b/hassio/api/snapshots.py @@ -63,9 +63,10 @@ class APISnapshots(object): } @api_process - def reload(self, request): + async def reload(self, request): """Reload snapshot list.""" - return asyncio.shield(self.snapshots.reload(), loop=self.loop) + await asyncio.shield(self.snapshots.reload(), loop=self.loop) + return True @api_process async def info(self, request): diff --git a/hassio/api/supervisor.py b/hassio/api/supervisor.py index 52b49b922..d72056b46 100644 --- a/hassio/api/supervisor.py +++ b/hassio/api/supervisor.py @@ -6,11 +6,10 @@ import voluptuous as vol from .util import api_process, api_process_raw, api_validate from ..const import ( - ATTR_ADDONS, ATTR_VERSION, ATTR_LAST_VERSION, ATTR_BETA_CHANNEL, - HASSIO_VERSION, ATTR_ADDONS_REPOSITORIES, ATTR_REPOSITORIES, - ATTR_REPOSITORY, ATTR_DESCRIPTON, ATTR_NAME, ATTR_SLUG, ATTR_INSTALLED, - ATTR_DETACHED, ATTR_SOURCE, ATTR_MAINTAINER, ATTR_URL, ATTR_ARCH, - ATTR_BUILD, ATTR_TIMEZONE, CONTENT_TYPE_BINARY) + ATTR_ADDONS, ATTR_VERSION, ATTR_LAST_VERSION, ATTR_BETA_CHANNEL, ATTR_ARCH, + HASSIO_VERSION, ATTR_ADDONS_REPOSITORIES, ATTR_LOGO, ATTR_REPOSITORY, + ATTR_DESCRIPTON, ATTR_NAME, ATTR_SLUG, ATTR_INSTALLED, ATTR_TIMEZONE, + ATTR_STATE, CONTENT_TYPE_BINARY) from ..tools import validate_timezone _LOGGER = logging.getLogger(__name__) @@ -41,42 +40,6 @@ class APISupervisor(object): self.host_control = host_control self.websession = websession - def _addons_list(self, only_installed=False): - """Return a list of addons.""" - data = [] - for addon in self.addons.list_addons: - if only_installed and not addon.is_installed: - continue - - data.append({ - ATTR_NAME: addon.name, - ATTR_SLUG: addon.slug, - ATTR_DESCRIPTON: addon.description, - ATTR_VERSION: addon.last_version, - ATTR_INSTALLED: addon.version_installed, - ATTR_ARCH: addon.supported_arch, - ATTR_DETACHED: addon.is_detached, - ATTR_REPOSITORY: addon.repository, - ATTR_BUILD: addon.need_build, - ATTR_URL: addon.url, - }) - - return data - - def _repositories_list(self): - """Return a list of addons repositories.""" - data = [] - for repository in self.addons.list_repositories: - data.append({ - ATTR_SLUG: repository.slug, - ATTR_NAME: repository.name, - ATTR_SOURCE: repository.source, - ATTR_URL: repository.url, - ATTR_MAINTAINER: repository.maintainer, - }) - - return data - @api_process async def ping(self, request): """Return ok for signal that the api is ready.""" @@ -85,24 +48,30 @@ class APISupervisor(object): @api_process async def info(self, request): """Return host information.""" + list_addons = [] + for addon in self.addons.list_addons: + if not addon.is_installed: + list_addons.append({ + ATTR_NAME: addon.name, + ATTR_SLUG: addon.slug, + ATTR_DESCRIPTON: addon.description, + ATTR_STATE: await addon.state(), + ATTR_VERSION: addon.last_version, + ATTR_INSTALLED: addon.version_installed, + ATTR_REPOSITORY: addon.repository, + ATTR_LOGO: addon.with_logo, + }) + return { ATTR_VERSION: HASSIO_VERSION, ATTR_LAST_VERSION: self.config.last_hassio, ATTR_BETA_CHANNEL: self.config.upstream_beta, ATTR_ARCH: self.config.arch, ATTR_TIMEZONE: self.config.timezone, - ATTR_ADDONS: self._addons_list(only_installed=True), + ATTR_ADDONS: list_addons, ATTR_ADDONS_REPOSITORIES: self.config.addons_repositories, } - @api_process - async def available_addons(self, request): - """Return information for all available addons.""" - return { - ATTR_ADDONS: self._addons_list(), - ATTR_REPOSITORIES: self._repositories_list(), - } - @api_process async def options(self, request): """Set supervisor options."""