50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
"""Register a repository."""
|
|
from aiogithubapi import AIOGitHubException
|
|
from custom_components.hacs.globals import get_hacs
|
|
from custom_components.hacs.hacsbase.exceptions import (
|
|
HacsException,
|
|
HacsExpectedException,
|
|
)
|
|
|
|
|
|
async def register_repository(full_name, category, check=True):
|
|
"""Register a repository."""
|
|
hacs = get_hacs()
|
|
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.registration()
|
|
if hacs.system.status.new:
|
|
repository.status.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.")
|
|
return repository.validate.errors
|
|
repository.logger.info("Registration complete")
|
|
except AIOGitHubException as exception:
|
|
hacs.common.skip.append(repository.data.full_name)
|
|
raise HacsException(f"Validation for {full_name} failed with {exception}.")
|
|
|
|
hacs.hass.bus.async_fire(
|
|
"hacs/repository",
|
|
{
|
|
"id": 1337,
|
|
"action": "registration",
|
|
"repository": repository.data.full_name,
|
|
"repository_id": repository.information.uid,
|
|
},
|
|
)
|
|
hacs.repositories.append(repository)
|