Check if a script requirement is available before install (#20517)

* Check if a script requirement is available before install

* PackageLoadable

* hound

* req
This commit is contained in:
Johann Kellerman 2019-02-26 20:20:54 +02:00 committed by Paulus Schoutsen
parent f3c9327ccf
commit 90d3f517d8
2 changed files with 16 additions and 9 deletions

View File

@ -9,7 +9,8 @@ from typing import List
from homeassistant.bootstrap import async_mount_local_lib_path
from homeassistant.config import get_default_config_dir
from homeassistant import requirements
from homeassistant.core import HomeAssistant
from homeassistant.requirements import pip_kwargs, PackageLoadable
from homeassistant.util.package import install_package, is_virtual_env
@ -39,16 +40,25 @@ def run(args: List) -> int:
config_dir = extract_config_dir()
if not is_virtual_env():
asyncio.get_event_loop().run_until_complete(
async_mount_local_lib_path(config_dir))
loop = asyncio.get_event_loop()
pip_kwargs = requirements.pip_kwargs(config_dir)
if not is_virtual_env():
loop.run_until_complete(async_mount_local_lib_path(config_dir))
_pip_kwargs = pip_kwargs(config_dir)
logging.basicConfig(stream=sys.stdout, level=logging.INFO)
hass = HomeAssistant(loop)
pkgload = PackageLoadable(hass)
for req in getattr(script, 'REQUIREMENTS', []):
returncode = install_package(req, **pip_kwargs)
try:
loop.run_until_complete(pkgload.loadable(req))
continue
except ImportError:
pass
returncode = install_package(req, **_pip_kwargs)
if not returncode:
print('Aborting script, could not install dependency', req)

View File

@ -5,7 +5,6 @@ import logging
import os
from collections import OrderedDict, namedtuple
from glob import glob
from platform import system
from typing import Dict, List, Sequence
from unittest.mock import patch
@ -22,8 +21,6 @@ from homeassistant.util import yaml
from homeassistant.exceptions import HomeAssistantError
REQUIREMENTS = ('colorlog==4.0.2',)
if system() == 'Windows': # Ensure colorama installed for colorlog on Windows
REQUIREMENTS += ('colorama<=1',)
_LOGGER = logging.getLogger(__name__)
# pylint: disable=protected-access