Refactor __main__ to use ArgParse

This commit is contained in:
Paulus Schoutsen 2014-11-05 07:58:20 -08:00
parent aa80841519
commit 9f24101348
2 changed files with 31 additions and 21 deletions

View File

@ -5,4 +5,4 @@ VOLUME /config
EXPOSE 8123
CMD [ "python", "-m", "homeassistant", "--docker" ]
CMD [ "python", "-m", "homeassistant", "--config", "/config" ]

View File

@ -2,6 +2,7 @@
import sys
import os
import argparse
try:
from homeassistant import bootstrap
@ -16,37 +17,46 @@ except ImportError:
from homeassistant import bootstrap
ARG_RUN_TESTS = "--run-tests"
ARG_DOCKER = '--docker'
def main():
""" Starts Home Assistant. Will create demo config if no config found. """
tasks = ['serve', 'test']
# Do we want to run the tests?
if ARG_RUN_TESTS in sys.argv:
sys.argv.remove(ARG_RUN_TESTS)
parser = argparse.ArgumentParser()
parser.add_argument(
'-c', '--config',
metavar='path_to_config_dir',
default="config",
help="Directory that contains the Home Assistant configuration")
parser.add_argument(
'-t', '--task',
default=tasks[0],
choices=tasks,
help="Task to execute. Defaults to serve.")
args = parser.parse_args()
if args.task == tasks[1]:
# unittest does not like our command line arguments, remove them
sys.argv[1:] = []
import unittest
unittest.main(module='homeassistant.test')
# Within Docker we load the config from a different path
if ARG_DOCKER in sys.argv:
config_path = '/config/home-assistant.conf'
else:
config_path = 'config/home-assistant.conf'
config_path = os.path.join(args.config, 'home-assistant.conf')
# Ensure a config file exists to make first time usage easier
if not os.path.isfile(config_path):
with open(config_path, 'w') as conf:
conf.write("[http]\n")
conf.write("api_password=password\n\n")
conf.write("[demo]\n")
# Ensure a config file exists to make first time usage easier
if not os.path.isfile(config_path):
with open(config_path, 'w') as conf:
conf.write("[http]\n")
conf.write("api_password=password\n\n")
conf.write("[demo]\n")
hass = bootstrap.from_config_file(config_path)
hass.start()
hass.block_till_stopped()
hass = bootstrap.from_config_file(config_path)
hass.start()
hass.block_till_stopped()
if __name__ == "__main__":
main()