Files
core/homeassistant/scripts/__init__.py
T

70 lines
2.0 KiB
Python
Raw Normal View History

2016-07-03 11:38:14 -07:00
"""Home Assistant command line scripts."""
2016-08-10 08:54:34 +02:00
import argparse
import asyncio
2016-07-03 11:38:14 -07:00
import importlib
2017-07-15 16:25:02 +02:00
import logging
2016-07-03 11:38:14 -07:00
import os
import sys
2016-08-10 08:54:34 +02:00
from typing import List
from homeassistant.bootstrap import async_mount_local_lib_path
2016-08-10 08:54:34 +02:00
from homeassistant.config import get_default_config_dir
from homeassistant.requirements import pip_kwargs
from homeassistant.util.package import (
install_package, is_virtual_env, is_installed)
2016-07-03 11:38:14 -07:00
2016-08-10 08:54:34 +02:00
def run(args: List) -> int:
2016-07-03 11:38:14 -07:00
"""Run a script."""
2016-07-31 20:58:39 -07:00
scripts = []
path = os.path.dirname(__file__)
for fil in os.listdir(path):
if fil == '__pycache__':
continue
elif os.path.isdir(os.path.join(path, fil)):
scripts.append(fil)
elif fil != '__init__.py' and fil.endswith('.py'):
scripts.append(fil[:-3])
2016-07-03 11:38:14 -07:00
if not args:
print('Please specify a script to run.')
print('Available scripts:', ', '.join(scripts))
return 1
if args[0] not in scripts:
print('Invalid script specified.')
print('Available scripts:', ', '.join(scripts))
return 1
script = importlib.import_module('homeassistant.scripts.' + args[0])
2016-08-10 08:54:34 +02:00
config_dir = extract_config_dir()
loop = asyncio.get_event_loop()
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)
2018-01-30 03:30:47 -08:00
2016-08-10 08:54:34 +02:00
for req in getattr(script, 'REQUIREMENTS', []):
if is_installed(req):
continue
2019-03-07 16:48:14 -08:00
if not install_package(req, **_pip_kwargs):
2017-07-31 10:00:09 -06:00
print('Aborting script, could not install dependency', req)
2016-08-10 08:54:34 +02:00
return 1
2019-06-22 10:19:36 +03:00
return script.run(args[1:])
2016-08-10 08:54:34 +02:00
def extract_config_dir(args=None) -> str:
"""Extract the config dir from the arguments or get the default."""
2016-08-18 03:57:52 +02:00
parser = argparse.ArgumentParser(add_help=False)
2016-08-10 08:54:34 +02:00
parser.add_argument('-c', '--config', default=None)
args = parser.parse_known_args(args)[0]
return (os.path.join(os.getcwd(), args.config) if args.config
else get_default_config_dir())