61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
""""Hacs base setup task."""
|
|
from __future__ import annotations
|
|
|
|
from datetime import timedelta
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
from ..base import HacsBase
|
|
from ..enums import HacsCategory, HacsStage
|
|
from ..exceptions import HacsException
|
|
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 update removed task."""
|
|
|
|
schedule = timedelta(hours=2)
|
|
stages = [HacsStage.STARTUP]
|
|
|
|
async def async_execute(self) -> None:
|
|
"""Execute the task."""
|
|
|
|
need_to_save = False
|
|
self.hacs.log.info("Loading removed repositories")
|
|
|
|
try:
|
|
removed_repositories = await self.hacs.async_github_get_hacs_default_file(
|
|
HacsCategory.REMOVED
|
|
)
|
|
except HacsException:
|
|
return
|
|
|
|
for item in removed_repositories:
|
|
removed = self.hacs.repositories.removed_repository(item["repository"])
|
|
removed.update_data(item)
|
|
|
|
for removed in self.hacs.repositories.list_removed:
|
|
if (repository := self.hacs.repositories.get_by_full_name(removed.repository)) is None:
|
|
continue
|
|
if repository.data.full_name in self.hacs.common.ignored_repositories:
|
|
continue
|
|
if repository.data.installed and removed.removal_type != "critical":
|
|
self.hacs.log.warning(
|
|
"You have '%s' installed with HACS "
|
|
"this repository has been removed from HACS, please consider removing it. "
|
|
"Removal reason (%s)",
|
|
repository.data.full_name,
|
|
removed.reason,
|
|
)
|
|
else:
|
|
need_to_save = True
|
|
repository.remove()
|
|
|
|
if need_to_save:
|
|
await self.hacs.data.async_write()
|