home-assistant/custom_components/hacs/base.py

115 lines
3.1 KiB
Python

"""Base HACS class."""
import logging
from typing import List, Optional
import pathlib
import attr
from aiogithubapi.github import AIOGitHubAPI
from aiogithubapi.objects.repository import AIOGitHubAPIRepository
from homeassistant.core import HomeAssistant
from .enums import HacsStage
from .helpers.functions.logger import getLogger
from .models.core import HacsCore
from .models.frontend import HacsFrontend
from .models.system import HacsSystem
class HacsCommon:
"""Common for HACS."""
categories: List = []
default: List = []
installed: List = []
skip: List = []
class HacsStatus:
"""HacsStatus."""
startup: bool = True
new: bool = False
background_task: bool = False
reloading_data: bool = False
upgrading_all: bool = False
@attr.s
class HacsBaseAttributes:
"""Base HACS class."""
_default: Optional[AIOGitHubAPIRepository]
_github: Optional[AIOGitHubAPI]
_hass: Optional[HomeAssistant]
_repository: Optional[AIOGitHubAPIRepository]
_stage: HacsStage = HacsStage.SETUP
_common: Optional[HacsCommon]
core: HacsCore = attr.ib(HacsCore)
common: HacsCommon = attr.ib(HacsCommon)
status: HacsStatus = attr.ib(HacsStatus)
frontend: HacsFrontend = attr.ib(HacsFrontend)
log: logging.Logger = getLogger()
system: HacsSystem = attr.ib(HacsSystem)
repositories: List = []
@attr.s
class HacsBase(HacsBaseAttributes):
"""Base HACS class."""
@property
def stage(self) -> HacsStage:
"""Returns a HacsStage object."""
return self._stage
@stage.setter
def stage(self, value: HacsStage) -> None:
"""Set the value for the stage property."""
self._stage = value
@property
def github(self) -> Optional[AIOGitHubAPI]:
"""Returns a AIOGitHubAPI object."""
return self._github
@github.setter
def github(self, value: AIOGitHubAPI) -> None:
"""Set the value for the github property."""
self._github = value
@property
def repository(self) -> Optional[AIOGitHubAPIRepository]:
"""Returns a AIOGitHubAPIRepository object representing hacs/integration."""
return self._repository
@repository.setter
def repository(self, value: AIOGitHubAPIRepository) -> None:
"""Set the value for the repository property."""
self._repository = value
@property
def default(self) -> Optional[AIOGitHubAPIRepository]:
"""Returns a AIOGitHubAPIRepository object representing hacs/default."""
return self._default
@default.setter
def default(self, value: AIOGitHubAPIRepository) -> None:
"""Set the value for the default property."""
self._default = value
@property
def hass(self) -> Optional[HomeAssistant]:
"""Returns a HomeAssistant object."""
return self._hass
@hass.setter
def hass(self, value: HomeAssistant) -> None:
"""Set the value for the default property."""
self._hass = value
@property
def integration_dir(self) -> pathlib.Path:
"""Return the HACS integration dir."""
return pathlib.Path(__file__).parent