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.bootstrap import async_mount_local_lib_path
from homeassistant.config import get_default_config_dir 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 from homeassistant.util.package import install_package, is_virtual_env
@ -39,16 +40,25 @@ def run(args: List) -> int:
config_dir = extract_config_dir() config_dir = extract_config_dir()
if not is_virtual_env(): loop = asyncio.get_event_loop()
asyncio.get_event_loop().run_until_complete(
async_mount_local_lib_path(config_dir))
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) logging.basicConfig(stream=sys.stdout, level=logging.INFO)
hass = HomeAssistant(loop)
pkgload = PackageLoadable(hass)
for req in getattr(script, 'REQUIREMENTS', []): 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: if not returncode:
print('Aborting script, could not install dependency', req) print('Aborting script, could not install dependency', req)

View file

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