Files
home-assistant/custom_components/hacs/tasks/prosess_queue.py
2022-05-04 10:50:54 -07:00

50 lines
1.4 KiB
Python

""""Hacs base setup task."""
from __future__ import annotations
from datetime import timedelta
from homeassistant.core import HomeAssistant
from ..base import HacsBase
from ..exceptions import HacsExecutionStillInProgress
from .base import HacsTask
async def async_setup_task(hacs: HacsBase, hass: HomeAssistant) -> Task:
"""Set up this task."""
return Task(hacs=hacs, hass=hass)
class Task(HacsTask):
""" "Hacs task base."""
schedule = timedelta(minutes=10)
async def async_execute(self) -> None:
"""Execute the task."""
if not self.hacs.queue.has_pending_tasks:
self.task_logger(self.hacs.log.debug, "Nothing in the queue")
return
if self.hacs.queue.running:
self.task_logger(self.hacs.log.debug, "Queue is already running")
return
async def _handle_queue():
if not self.hacs.queue.has_pending_tasks:
return
can_update = await self.hacs.async_can_update()
self.task_logger(
self.hacs.log.debug,
f"Can update {can_update} repositories, "
f"items in queue {self.hacs.queue.pending_tasks}",
)
if can_update != 0:
try:
await self.hacs.queue.execute(can_update)
except HacsExecutionStillInProgress:
return
await _handle_queue()
await _handle_queue()