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

65 lines
2.1 KiB
Python

""""Hacs base setup task."""
from __future__ import annotations
import asyncio
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 default task."""
schedule = timedelta(hours=3)
stages = [HacsStage.STARTUP]
async def async_execute(self) -> None:
"""Execute the task."""
self.hacs.log.info("Loading known repositories")
await asyncio.gather(
*[
self.async_get_category_repositories(HacsCategory(category))
for category in self.hacs.common.categories or []
]
)
async def async_get_category_repositories(self, category: HacsCategory) -> None:
"""Get repositories from category."""
try:
repositories = await self.hacs.async_github_get_hacs_default_file(category)
except HacsException:
return
for repo in repositories:
if self.hacs.common.renamed_repositories.get(repo):
repo = self.hacs.common.renamed_repositories[repo]
if self.hacs.repositories.is_removed(repo):
continue
if repo in self.hacs.common.archived_repositories:
continue
repository = self.hacs.repositories.get_by_full_name(repo)
if repository is not None:
self.hacs.repositories.mark_default(repository)
if self.hacs.status.new and self.hacs.configuration.dev:
# Force update for new installations
self.hacs.queue.add(repository.common_update())
continue
self.hacs.queue.add(
self.hacs.async_register_repository(
repository_full_name=repo,
category=category,
default=True,
)
)