update_manager: return True when on update success

All calls to update now return a boolean value.  When performing a full upate this return value is used to
check if Moonraker should wait for Klippy to reconnect.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
Eric Callahan 2021-07-08 07:50:08 -04:00
parent b6cd19d6ef
commit d76abe019f
4 changed files with 31 additions and 25 deletions

View File

@ -32,8 +32,8 @@ class BaseDeploy:
async def refresh(self) -> None:
pass
async def update(self) -> None:
pass
async def update(self) -> bool:
return False
def get_update_status(self) -> Dict[str, Any]:
return {}

View File

@ -77,7 +77,7 @@ class GitDeploy(AppDeploy):
self._is_valid = True
self.log_info("Validity check for git repo passed")
async def update(self) -> None:
async def update(self) -> bool:
await self.repo.wait_for_init()
if not self._is_valid:
raise self.log_exc("Update aborted, repo not valid", False)
@ -86,7 +86,7 @@ class GitDeploy(AppDeploy):
"Update aborted, repo has been modified", False)
if self.repo.is_current():
# No need to update
return
return False
self.cmd_helper.notify_update_response(
f"Updating Application {self.name}...")
inst_hash = await self._get_file_hash(self.install_script)
@ -99,6 +99,7 @@ class GitDeploy(AppDeploy):
await self._update_repo_state(need_fetch=False)
await self.restart_service()
self.notify_status("Update Finished...", is_complete=True)
return True
async def recover(self,
hard: bool = False,

View File

@ -315,21 +315,23 @@ class UpdateManager:
kupdater = self.updaters.get('klipper')
if isinstance(kupdater, AppDeploy):
self.klippy_identified_evt = asyncio.Event()
klippy_updated = True
if not await self._check_need_reinstall(app_name):
await kupdater.update()
self.cmd_helper.notify_update_response(
"Waiting for Klippy to reconnect (this may take"
" up to 2 minutes)...")
try:
await asyncio.wait_for(
self.klippy_identified_evt.wait(), 120.)
except asyncio.TimeoutError:
klippy_updated = await kupdater.update()
if klippy_updated:
self.cmd_helper.notify_update_response(
"Klippy reconnect timed out...")
else:
self.cmd_helper.notify_update_response(
f"Klippy Reconnected")
self.klippy_identified_evt = None
"Waiting for Klippy to reconnect (this may take"
" up to 2 minutes)...")
try:
await asyncio.wait_for(
self.klippy_identified_evt.wait(), 120.)
except asyncio.TimeoutError:
self.cmd_helper.notify_update_response(
"Klippy reconnect timed out...")
else:
self.cmd_helper.notify_update_response(
f"Klippy Reconnected")
self.klippy_identified_evt = None
# Update Moonraker
app_name = 'moonraker'
@ -817,10 +819,10 @@ class PackageDeploy(BaseDeploy):
self.refresh_evt.set()
self.refresh_evt = None
async def update(self) -> None:
async def update(self) -> bool:
async with self.mutex:
if not self.available_packages:
return
return False
self.cmd_helper.notify_update_response("Updating packages...")
try:
await self._update_apt(force=True, notify=True)
@ -832,6 +834,7 @@ class PackageDeploy(BaseDeploy):
self.available_packages = []
self.cmd_helper.notify_update_response(
"Package update finished...", is_complete=True)
return True
async def _update_apt(self,
force: bool = False,
@ -936,22 +939,22 @@ class WebClientDeploy(BaseDeploy):
f"size: {size}\n"
f"Content Type: {content_type}")
async def update(self) -> None:
async def update(self) -> bool:
async with self.mutex:
if self.remote_version == "?":
await self._get_remote_version()
if self.remote_version == "?":
raise self.server.error(
f"Client {self.repo}: Unable to locate update")
self.cmd_helper.notify_update_response(
f"Updating Web Client {self.name}...")
dl_url, content_type, size = self.dl_info
if dl_url == "?":
raise self.server.error(
f"Client {self.repo}: Invalid download url")
if self.version == self.remote_version:
# Already up to date
return
return False
self.cmd_helper.notify_update_response(
f"Updating Web Client {self.name}...")
self.cmd_helper.notify_update_response(
f"Downloading Client: {self.name}")
with tempfile.TemporaryDirectory(
@ -975,6 +978,7 @@ class WebClientDeploy(BaseDeploy):
tpe, version_path.write_text, self.version)
self.cmd_helper.notify_update_response(
f"Client Update Finished: {self.name}", is_complete=True)
return True
def _extract_release(self,
persist_dir: pathlib.Path,

View File

@ -339,13 +339,13 @@ class ZipDeploy(AppDeploy):
with zipfile.ZipFile(release_zip) as zf:
zf.extractall(self.path)
async def update(self, force_dep_update: bool = False) -> None:
async def update(self, force_dep_update: bool = False) -> bool:
async with self.mutex:
if not self._is_valid:
raise self.log_exc("Update aborted, repo not valid", False)
if self.short_version == self.latest_version:
# already up to date
return
return False
self.cmd_helper.notify_update_response(
f"Updating Application {self.name}...")
npm_hash = await self._get_file_hash(self.npm_pkg_json)
@ -366,6 +366,7 @@ class ZipDeploy(AppDeploy):
await self._update_repo_state()
await self.restart_service()
self.notify_status("Update Finished...", is_complete=True)
return True
async def recover(self,
hard: bool = False,