File: //usr/local/bin/dhwp/dhwp/main.py
from cement import App, TestApp, init_defaults
from cement.core.exc import CaughtSignal
from .core.exc import DhWpError
from .controllers.base import Base
from .controllers.stage import Stage
from .controllers.install import Install
from .controllers.metrics import Metrics
from .controllers.test import Test
# configuration defaults
CONFIG = init_defaults('dhwp')
CONFIG['dhwp']['foo'] = 'bar'
class DhWp(App):
"""DH WP primary application."""
class Meta:
label = 'dhwp'
# configuration defaults
config_defaults = CONFIG
# call sys.exit() on close
close_on_exit = True
# load additional framework extensions
extensions = [
'yaml',
'colorlog',
'jinja2',
]
# configuration handler
config_handler = 'yaml'
# configuration file suffix
config_file_suffix = '.yml'
# set the log handler
log_handler = 'colorlog'
# set the output handler
output_handler = 'jinja2'
# register handlers
handlers = [
Base,
Stage,
Test,
Install,
Metrics,
]
class DhWpTest(TestApp, DhWp):
"""A sub-class of DhWp that is better suited for testing."""
class Meta:
label = 'dhwp'
def main():
with DhWp() as app:
try:
app.run()
except AssertionError as e:
print('AssertionError > %s' % e.args[0])
app.exit_code = 1
if app.debug is True:
import traceback
traceback.print_exc()
except DhWpError as e:
print('DhWpError > %s' % e.args[0])
app.exit_code = 1
if app.debug is True:
import traceback
traceback.print_exc()
except CaughtSignal as e:
# Default Cement signals are SIGINT and SIGTERM, exit 0 (non-error)
print('\n%s' % e)
app.exit_code = 0
if __name__ == '__main__':
main()