mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-10-08 19:29:43 +00:00

* Fix small bugs (python37) * Update utils.py * Update utils.py * Update utils.py * Update utils.py * Update utils.py
54 lines
1.3 KiB
Python
54 lines
1.3 KiB
Python
"""Util addons functions."""
|
|
import asyncio
|
|
import hashlib
|
|
import logging
|
|
import re
|
|
|
|
RE_SHA1 = re.compile(r"[a-f0-9]{8}")
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
def get_hash_from_repository(name):
|
|
"""Generate a hash from repository."""
|
|
key = name.lower().encode()
|
|
return hashlib.sha1(key).hexdigest()[:8]
|
|
|
|
|
|
def extract_hash_from_path(path):
|
|
"""Extract repo id from path."""
|
|
repo_dir = path.parts[-1]
|
|
|
|
if not RE_SHA1.match(repo_dir):
|
|
return get_hash_from_repository(repo_dir)
|
|
return repo_dir
|
|
|
|
|
|
def check_installed(method):
|
|
"""Wrap function with check if addon is installed."""
|
|
async def wrap_check(addon, *args, **kwargs):
|
|
"""Return False if not installed or the function."""
|
|
if not addon.is_installed:
|
|
_LOGGER.error("Addon %s is not installed", addon.slug)
|
|
return False
|
|
return await method(addon, *args, **kwargs)
|
|
|
|
return wrap_check
|
|
|
|
|
|
async def remove_data(folder):
|
|
"""Remove folder and reset privileged."""
|
|
try:
|
|
proc = await asyncio.create_subprocess_exec(
|
|
"rm", "-rf", str(folder),
|
|
stdout=asyncio.subprocess.DEVNULL
|
|
)
|
|
|
|
_, error_msg = await proc.communicate()
|
|
except OSError as err:
|
|
error_msg = str(err)
|
|
|
|
if proc.returncode == 0:
|
|
return
|
|
_LOGGER.error("Can't remove Add-on Data: %s", error_msg)
|