2020-06-07 14:29:26 -04:00

69 lines
2.4 KiB
Python

"""Register a repository."""
from aiogithubapi import AIOGitHubAPIException
from custom_components.hacs.globals import get_hacs
from custom_components.hacs.hacsbase.exceptions import (
HacsException,
HacsExpectedException,
)
# @concurrent(15, 5)
async def register_repository(full_name, category, check=True, ref=None, action=False):
"""Register a repository."""
hacs = get_hacs()
hacs.action = action
from custom_components.hacs.repositories import (
RERPOSITORY_CLASSES,
) # To hanle import error
if full_name in hacs.common.skip:
if full_name != "hacs/integration":
raise HacsExpectedException(f"Skipping {full_name}")
if category not in RERPOSITORY_CLASSES:
raise HacsException(f"{category} is not a valid repository category.")
repository = RERPOSITORY_CLASSES[category](full_name)
if check:
try:
await repository.async_registration(ref)
if hacs.system.status.new:
repository.data.new = False
if repository.validate.errors:
hacs.common.skip.append(repository.data.full_name)
if not hacs.system.status.startup:
hacs.logger.error(f"Validation for {full_name} failed.")
if hacs.action:
raise HacsException(f"Validation for {full_name} failed.")
return repository.validate.errors
if hacs.action:
repository.logger.info("Validation complete")
else:
repository.logger.info("Registration complete")
except AIOGitHubAPIException as exception:
hacs.common.skip.append(repository.data.full_name)
raise HacsException(f"Validation for {full_name} failed with {exception}.")
exists = (
False
if str(repository.data.id) == "0"
else [x for x in hacs.repositories if str(x.data.id) == str(repository.data.id)]
)
if exists:
if exists[0] in hacs.repositories:
hacs.repositories.remove(exists[0])
else:
if hacs.hass is not None:
hacs.hass.bus.async_fire(
"hacs/repository",
{
"id": 1337,
"action": "registration",
"repository": repository.data.full_name,
"repository_id": repository.data.id,
},
)
hacs.repositories.append(repository)