Return a error on update with own version (#124)

Return a error on update with own version
This commit is contained in:
Pascal Vizeli 2017-08-02 16:59:38 +02:00 committed by GitHub
parent 3809f20c6a
commit 8afde1e881
7 changed files with 92 additions and 51 deletions

View File

@ -413,14 +413,20 @@ class Addon(object):
return STATE_STOPPED
@check_installed
async def start(self):
"""Set options and start addon."""
return await self.addon_docker.run()
def start(self):
"""Set options and start addon.
Return a coroutine.
"""
return self.addon_docker.run()
@check_installed
async def stop(self):
"""Stop addon."""
return await self.addon_docker.stop()
def stop(self):
"""Stop addon.
Return a coroutine.
"""
return self.addon_docker.stop()
@check_installed
async def update(self, version=None):
@ -430,7 +436,7 @@ class Addon(object):
if version == self.version_installed:
_LOGGER.warning(
"Addon %s is already installed in %s", self._id, version)
return True
return False
if not await self.addon_docker.update(version):
return False
@ -439,14 +445,20 @@ class Addon(object):
return True
@check_installed
async def restart(self):
"""Restart addon."""
return await self.addon_docker.restart()
def restart(self):
"""Restart addon.
Return a coroutine.
"""
return self.addon_docker.restart()
@check_installed
async def logs(self):
"""Return addons log output."""
return await self.addon_docker.logs()
def logs(self):
"""Return addons log output.
Return a coroutine.
"""
return self.addon_docker.logs()
@check_installed
async def snapshot(self, tar_file):

View File

@ -152,20 +152,26 @@ class APIAddons(object):
"""Install addon."""
body = await api_validate(SCHEMA_VERSION, request)
addon = self._extract_addon(request, check_installed=False)
version = body.get(ATTR_VERSION)
version = body.get(ATTR_VERSION, addon.last_version)
return await asyncio.shield(
addon.install(version=version), loop=self.loop)
@api_process
async def uninstall(self, request):
"""Uninstall addon."""
def uninstall(self, request):
"""Uninstall addon.
Return a coroutine.
"""
addon = self._extract_addon(request)
return await asyncio.shield(addon.uninstall(), loop=self.loop)
return asyncio.shield(addon.uninstall(), loop=self.loop)
@api_process
async def start(self, request):
"""Start addon."""
def start(self, request):
"""Start addon.
Return a coroutine.
"""
addon = self._extract_addon(request)
# check options
@ -175,33 +181,45 @@ class APIAddons(object):
except vol.Invalid as ex:
raise RuntimeError(humanize_error(options, ex)) from None
return await asyncio.shield(addon.start(), loop=self.loop)
return asyncio.shield(addon.start(), loop=self.loop)
@api_process
async def stop(self, request):
"""Stop addon."""
def stop(self, request):
"""Stop addon.
Return a coroutine.
"""
addon = self._extract_addon(request)
return await asyncio.shield(addon.stop(), loop=self.loop)
return asyncio.shield(addon.stop(), loop=self.loop)
@api_process
async def update(self, request):
"""Update addon."""
body = await api_validate(SCHEMA_VERSION, request)
addon = self._extract_addon(request)
version = body.get(ATTR_VERSION)
version = body.get(ATTR_VERSION, addon.last_version)
if version == addon.version_installed:
raise RuntimeError("Version %s is already in use", version)
return await asyncio.shield(
addon.update(version=version), loop=self.loop)
@api_process
async def restart(self, request):
"""Restart addon."""
def restart(self, request):
"""Restart addon.
Return a coroutine.
"""
addon = self._extract_addon(request)
return await asyncio.shield(addon.restart(), loop=self.loop)
return asyncio.shield(addon.restart(), loop=self.loop)
@api_process_raw(CONTENT_TYPE_BINARY)
def logs(self, request):
"""Return logs from addon."""
"""Return logs from addon.
Return a coroutine.
"""
addon = self._extract_addon(request)
return addon.logs()

View File

@ -65,20 +65,19 @@ class APIHomeAssistant(object):
body = await api_validate(SCHEMA_VERSION, request)
version = body.get(ATTR_VERSION, self.config.last_homeassistant)
if self.homeassistant.in_progress:
raise RuntimeError("Other task is in progress")
if version == self.homeassistant.version:
raise RuntimeError("Version {} is already in use".format(version))
return await asyncio.shield(
self.homeassistant.update(version), loop=self.loop)
@api_process
async def restart(self, request):
"""Restart homeassistant."""
if self.homeassistant.in_progress:
raise RuntimeError("Other task is in progress")
def restart(self, request):
"""Restart homeassistant.
return await asyncio.shield(
self.homeassistant.restart(), loop=self.loop)
Return a coroutine.
"""
return asyncio.shield(self.homeassistant.restart(), loop=self.loop)
@api_process_raw(CONTENT_TYPE_BINARY)
def logs(self, request):

View File

@ -40,12 +40,18 @@ class APIHost(object):
@api_process_hostcontrol
def reboot(self, request):
"""Reboot host."""
"""Reboot host.
Return a coroutine.
"""
return self.host_control.reboot()
@api_process_hostcontrol
def shutdown(self, request):
"""Poweroff host."""
"""Poweroff host.
Return a coroutine.
"""
return self.host_control.shutdown()
@api_process_hostcontrol
@ -55,7 +61,7 @@ class APIHost(object):
version = body.get(ATTR_VERSION, self.host_control.last_version)
if version == self.host_control.version:
raise RuntimeError("Version is already in use")
raise RuntimeError("Version {} is already in use".format(version))
return await asyncio.shield(
self.host_control.update(version=version), loop=self.loop)

View File

@ -111,10 +111,13 @@ class APISnapshots(object):
self.snapshots.do_snapshot_partial(**body), loop=self.loop)
@api_process
async def restore_full(self, request):
"""Full-Restore a snapshot."""
def restore_full(self, request):
"""Full-Restore a snapshot.
Return a coroutine.
"""
snapshot = self._extract_snapshot(request)
return await asyncio.shield(
return asyncio.shield(
self.snapshots.do_restore_full(snapshot), loop=self.loop)
@api_process
@ -125,7 +128,8 @@ class APISnapshots(object):
return await asyncio.shield(
self.snapshots.do_restore_partial(snapshot, **body),
loop=self.loop)
loop=self.loop
)
@api_process
async def remove(self, request):

View File

@ -96,10 +96,10 @@ class APISupervisor(object):
version = body.get(ATTR_VERSION, self.config.last_hassio)
if version == self.supervisor.version:
raise RuntimeError("Version is already in use")
raise RuntimeError("Version {} is already in use".format(version))
return await asyncio.shield(
self.supervisor.update(version), loop=self.loop)
self.supervisor.update(version=version), loop=self.loop)
@api_process
async def reload(self, request):

View File

@ -113,13 +113,15 @@ class HomeAssistant(JsonConfig):
_LOGGER.info("HomeAssistant docker now installed")
await self.docker.cleanup()
def update(self, version=None):
"""Update HomeAssistant version.
Return a coroutine.
"""
async def update(self, version=None):
"""Update HomeAssistant version."""
version = version or self.last_version
return self.docker.update(version)
if version == self.docker.version:
_LOGGER.warning("Version %s is already installed", version)
return False
return await self.docker.update(version)
def run(self):
"""Run HomeAssistant docker.