updating to latest
This commit is contained in:
121
custom_components/hacs/api/hacs_repository_data.py
Normal file
121
custom_components/hacs/api/hacs_repository_data.py
Normal file
@@ -0,0 +1,121 @@
|
||||
"""API Handler for hacs_repository_data"""
|
||||
import sys
|
||||
|
||||
from aiogithubapi import AIOGitHubAPIException
|
||||
from homeassistant.components import websocket_api
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
import voluptuous as vol
|
||||
|
||||
from custom_components.hacs.exceptions import HacsException
|
||||
from custom_components.hacs.helpers.functions.misc import extract_repository_from_url
|
||||
from custom_components.hacs.helpers.functions.register_repository import (
|
||||
register_repository,
|
||||
)
|
||||
from custom_components.hacs.share import get_hacs
|
||||
from custom_components.hacs.utils.logger import getLogger
|
||||
|
||||
_LOGGER = getLogger()
|
||||
|
||||
|
||||
@websocket_api.async_response
|
||||
@websocket_api.websocket_command(
|
||||
{
|
||||
vol.Required("type"): "hacs/repository/data",
|
||||
vol.Optional("action"): cv.string,
|
||||
vol.Optional("repository"): cv.string,
|
||||
vol.Optional("data"): cv.string,
|
||||
}
|
||||
)
|
||||
async def hacs_repository_data(hass, connection, msg):
|
||||
"""Handle get media player cover command."""
|
||||
hacs = get_hacs()
|
||||
repo_id = msg.get("repository")
|
||||
action = msg.get("action")
|
||||
data = msg.get("data")
|
||||
|
||||
if repo_id is None:
|
||||
return
|
||||
|
||||
if action == "add":
|
||||
repo_id = extract_repository_from_url(repo_id)
|
||||
if repo_id is None:
|
||||
return
|
||||
|
||||
if repo_id in hacs.common.skip:
|
||||
hacs.common.skip.remove(repo_id)
|
||||
|
||||
if not hacs.get_by_name(repo_id):
|
||||
try:
|
||||
registration = await register_repository(repo_id, data.lower())
|
||||
if registration is not None:
|
||||
raise HacsException(registration)
|
||||
except (
|
||||
Exception,
|
||||
BaseException,
|
||||
) as exception: # pylint: disable=broad-except
|
||||
hass.bus.async_fire(
|
||||
"hacs/error",
|
||||
{
|
||||
"action": "add_repository",
|
||||
"exception": str(sys.exc_info()[0].__name__),
|
||||
"message": str(exception),
|
||||
},
|
||||
)
|
||||
else:
|
||||
hass.bus.async_fire(
|
||||
"hacs/error",
|
||||
{
|
||||
"action": "add_repository",
|
||||
"message": f"Repository '{repo_id}' exists in the store.",
|
||||
},
|
||||
)
|
||||
|
||||
repository = hacs.get_by_name(repo_id)
|
||||
else:
|
||||
repository = hacs.get_by_id(repo_id)
|
||||
|
||||
if repository is None:
|
||||
hass.bus.async_fire("hacs/repository", {})
|
||||
return
|
||||
|
||||
_LOGGER.debug("Running %s for %s", action, repository.data.full_name)
|
||||
try:
|
||||
if action == "set_state":
|
||||
repository.state = data
|
||||
|
||||
elif action == "set_version":
|
||||
repository.data.selected_tag = data
|
||||
await repository.update_repository()
|
||||
|
||||
repository.state = None
|
||||
|
||||
elif action == "install":
|
||||
was_installed = repository.data.installed
|
||||
repository.data.selected_tag = data
|
||||
await repository.update_repository()
|
||||
await repository.async_install()
|
||||
repository.state = None
|
||||
if not was_installed:
|
||||
hass.bus.async_fire("hacs/reload", {"force": True})
|
||||
|
||||
elif action == "add":
|
||||
repository.state = None
|
||||
|
||||
else:
|
||||
repository.state = None
|
||||
_LOGGER.error("WS action '%s' is not valid", action)
|
||||
|
||||
message = None
|
||||
except AIOGitHubAPIException as exception:
|
||||
message = exception
|
||||
except AttributeError as exception:
|
||||
message = f"Could not use repository with ID {repo_id} ({exception})"
|
||||
except (Exception, BaseException) as exception: # pylint: disable=broad-except
|
||||
message = exception
|
||||
|
||||
if message is not None:
|
||||
_LOGGER.error(message)
|
||||
hass.bus.async_fire("hacs/error", {"message": str(message)})
|
||||
|
||||
await hacs.data.async_write()
|
||||
connection.send_message(websocket_api.result_message(msg["id"], {}))
|
||||
Reference in New Issue
Block a user