1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
# ============LICENSE_START=======================================================
# org.onap.dcae
# ================================================================================
# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============LICENSE_END=========================================================
#
# ECOMP is a trademark and service mark of AT&T Intellectual Property.
# -*- coding: utf-8 -*-
"""
Provides entry-level logic for building the CLI. Commands and heavy-lifting logic should be in their own module.
"""
import click
from dcae_cli import util
from dcae_cli.commands.catalog import catalog
from dcae_cli.commands.component import component
from dcae_cli.commands.data_format import data_format
from dcae_cli.commands.profiles import profiles
from dcae_cli.catalog import get_catalog
from dcae_cli.util.exc import DcaeException
from dcae_cli.util.logger import get_logger
from dcae_cli.util import config as conf
from dcae_cli.util import profiles as prof
log = get_logger('cli')
def _reinit_cli():
"""Reinit cli"""
click.echo("Warning! Reinitializing your dcae-cli configuration")
try:
conf.reinit_config()
prof.reinit_profiles()
except Exception as e:
raise DcaeException("Failed to reinitialize configuration: {0}".format(e))
def _reinit_callback(ctx, param, value):
"""Callback used for the eager --reinit option"""
if not value or ctx.resilient_parsing:
return
_reinit_cli()
click.echo("Reinitialize done")
ctx.exit()
@click.group()
@click.option('--verbose', '-v', is_flag=True, default=False, help='Prints INFO-level logs to screen.')
# This is following the same pattern as --version
# http://click.pocoo.org/5/options/#callbacks-and-eager-options
@click.option('--reinit', is_flag=True, callback=_reinit_callback, expose_value=False,
is_eager=True, help='Re-initialize dcae-cli configuration')
@click.version_option()
@click.pass_context
def cli(ctx, verbose):
if ctx.obj is None:
ctx.obj = dict()
if 'config' not in ctx.obj:
config = conf.get_config()
if conf.should_force_reinit(config):
if click.confirm("You must reinitialize your dcae-cli configuration. Reinitialize now?",
abort=True):
_reinit_cli()
ctx.obj['config'] = config
else:
config = ctx.obj['config']
if 'catalog' not in ctx.obj:
try:
ctx.obj['catalog'] = get_catalog(**config)
except Exception as e:
log.error(e)
raise DcaeException("Having issues connecting to the onboarding catalog")
if verbose:
util.logger.set_verbose()
@cli.command(name="http", help="Run HTTP API")
@click.option('--live', is_flag=True, default=False, help='Starts up the HTTP API in live mode which means it binds to 80')
@click.pass_context
def run_http_api(ctx, live):
catalog = ctx.obj['catalog']
should_debug = not live
# Importing http module has to be here otherwise unit tests will break
# because http module makes config calls when the module is loaded (global).
# Config calls must always be done lazily as much as possible in order for the
# mock_cli_config pytest.fixture to kick in.
from dcae_cli import http
http.start_http_server(catalog, debug=should_debug)
cli.add_command(catalog)
cli.add_command(component)
cli.add_command(data_format)
cli.add_command(profiles)
|