mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-15 13:16:29 +00:00
JobManager should not touch our exceptions (#2261)
* JobManager should not touch our exceptions * Add tests * temporary allow su update all time * Update supervisor/jobs/decorator.py Co-authored-by: Joakim Sørensen <joasoe@gmail.com> Co-authored-by: Joakim Sørensen <joasoe@gmail.com>
This commit is contained in:
parent
476f021fbf
commit
4b500ef873
@ -3,6 +3,8 @@ from enum import Enum
|
||||
import logging
|
||||
from typing import List, Optional
|
||||
|
||||
import sentry_sdk
|
||||
|
||||
from ..const import CoreState
|
||||
from ..coresys import CoreSys
|
||||
from ..exceptions import HassioError, JobException
|
||||
@ -57,16 +59,17 @@ class Job:
|
||||
return False
|
||||
|
||||
try:
|
||||
result = await self._method(*args, **kwargs)
|
||||
return await self._method(*args, **kwargs)
|
||||
except HassioError as err:
|
||||
_LOGGER.error(err)
|
||||
raise err
|
||||
except Exception as err:
|
||||
_LOGGER.exception("Unhandled exception: %s", err)
|
||||
sentry_sdk.capture_exception(err)
|
||||
raise JobException() from err
|
||||
finally:
|
||||
if self.cleanup:
|
||||
self._coresys.jobs.remove_job(job)
|
||||
|
||||
return result
|
||||
|
||||
return wrapper
|
||||
|
||||
def _check_conditions(self):
|
||||
|
@ -144,7 +144,7 @@ class Tasks(CoreSysAttributes):
|
||||
except AddonsError:
|
||||
_LOGGER.error("Can't auto update Add-on %s", addon.slug)
|
||||
|
||||
@Job(conditions=[JobCondition.HEALTHY, JobCondition.FREE_SPACE])
|
||||
@Job(conditions=[JobCondition.FREE_SPACE])
|
||||
async def _update_supervisor(self):
|
||||
"""Check and run update of Supervisor Supervisor."""
|
||||
if not self.sys_supervisor.need_update:
|
||||
|
@ -159,7 +159,7 @@ class Updater(JsonConfig, CoreSysAttributes):
|
||||
self._data[ATTR_CHANNEL] = value
|
||||
|
||||
@AsyncThrottle(timedelta(seconds=30))
|
||||
@Job(conditions=[JobCondition.HEALTHY])
|
||||
@Job(conditions=[JobCondition.INTERNET])
|
||||
async def fetch_data(self):
|
||||
"""Fetch current versions from Github.
|
||||
|
||||
|
@ -2,8 +2,11 @@
|
||||
# pylint: disable=protected-access,import-error
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
from supervisor.const import CoreState
|
||||
from supervisor.coresys import CoreSys
|
||||
from supervisor.exceptions import HassioError, JobException
|
||||
from supervisor.jobs.decorator import Job, JobCondition
|
||||
from supervisor.resolution.const import UnhealthyReason
|
||||
|
||||
@ -127,3 +130,45 @@ async def test_internet_connectivity_with_core_state(coresys: CoreSys):
|
||||
|
||||
coresys.core.state = CoreState.STOPPING
|
||||
assert await test.execute()
|
||||
|
||||
|
||||
async def test_exception(coresys: CoreSys):
|
||||
"""Test the healty decorator."""
|
||||
|
||||
class TestClass:
|
||||
"""Test class."""
|
||||
|
||||
def __init__(self, coresys: CoreSys):
|
||||
"""Initialize the test class."""
|
||||
self.coresys = coresys
|
||||
|
||||
@Job(conditions=[JobCondition.HEALTHY])
|
||||
async def execute(self):
|
||||
"""Execute the class method."""
|
||||
raise HassioError()
|
||||
|
||||
test = TestClass(coresys)
|
||||
|
||||
with pytest.raises(HassioError):
|
||||
assert await test.execute()
|
||||
|
||||
|
||||
async def test_exception_not_handle(coresys: CoreSys):
|
||||
"""Test the healty decorator."""
|
||||
|
||||
class TestClass:
|
||||
"""Test class."""
|
||||
|
||||
def __init__(self, coresys: CoreSys):
|
||||
"""Initialize the test class."""
|
||||
self.coresys = coresys
|
||||
|
||||
@Job(conditions=[JobCondition.HEALTHY])
|
||||
async def execute(self):
|
||||
"""Execute the class method."""
|
||||
raise Exception()
|
||||
|
||||
test = TestClass(coresys)
|
||||
|
||||
with pytest.raises(JobException):
|
||||
assert await test.execute()
|
Loading…
x
Reference in New Issue
Block a user