modify nrpv for parameter
[parser.git] / tosca2heat / tosca-parser / toscaparser / shell.py
1 #    Licensed under the Apache License, Version 2.0 (the "License"); you may
2 #    not use this file except in compliance with the License. You may obtain
3 #    a copy of the License at
4 #
5 #         http://www.apache.org/licenses/LICENSE-2.0
6 #
7 #    Unless required by applicable law or agreed to in writing, software
8 #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
9 #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
10 #    License for the specific language governing permissions and limitations
11 #    under the License.
12
13
14 import argparse
15 import logging
16 import os
17 import sys
18
19 from toscaparser.common.exception import ValidationError
20 from toscaparser.tosca_template import ToscaTemplate
21 from toscaparser.utils.gettextutils import _
22 import toscaparser.utils.urlutils
23
24 """
25 CLI entry point to show how TOSCA Parser can be used programmatically
26
27 This is a basic command line utility showing the entry point in the
28 TOSCA Parser and how to iterate over parsed template. It can be extended
29 or modified to fit an individual need.
30
31 It can be used as,
32 #tosca-parser --template-file=<path to the YAML template>
33 #tosca-parser --template-file=<path to the CSAR zip file>
34 #tosca-parser --template-file=<URL to the template or CSAR>
35
36 e.g.
37 #tosca-parser
38  --template-file=toscaparser/tests/data/tosca_helloworld.yaml
39 #tosca-parser
40  --template-file=toscaparser/tests/data/CSAR/csar_hello_world.zip
41 """
42
43 log = logging.getLogger("tosca.model")
44
45
46 class ParserShell(object):
47
48     def get_parser(self, argv):
49         parser = argparse.ArgumentParser(prog="tosca-parser")
50
51         parser.add_argument('--template-file',
52                             metavar='<filename>',
53                             required=True,
54                             help=_('YAML template or CSAR file to parse.'))
55
56         parser.add_argument('--nrpv', dest='no_required_paras_check',
57                             action='store_true', default=False,
58                             help=_('Ignore input parameter validation '
59                                    'when parse template.'))
60
61         parser.add_argument('--debug', dest='debug_mode',
62                             action='store_true', default=False,
63                             help=_('debug mode for print more details '
64                                    'other than raise exceptions when '
65                                    'errors happen as possible'))
66
67         return parser
68
69     def main(self, argv):
70         parser = self.get_parser(argv)
71         (args, extra_args) = parser.parse_known_args(argv)
72         path = args.template_file
73         nrpv = args.no_required_paras_check
74         debug = args.debug_mode
75
76         if os.path.isfile(path):
77             self.parse(path, no_required_paras_check=nrpv, debug_mode=debug)
78         elif toscaparser.utils.urlutils.UrlUtils.validate_url(path):
79             self.parse(path, False,
80                        no_required_paras_check=nrpv,
81                        debug_mode=debug)
82         else:
83             raise ValueError(_('"%(path)s" is not a valid file.')
84                              % {'path': path})
85
86     def parse(self, path, a_file=True, no_required_paras_check=False,
87               debug_mode=False):
88         nrpv = no_required_paras_check
89         try:
90             tosca = ToscaTemplate(path, None, a_file,
91                                   no_required_paras_check=nrpv,
92                                   debug_mode=debug_mode)
93         except ValidationError as e:
94             log.error(e.message)
95             if debug_mode:
96                 print(e.message)
97             else:
98                 raise e
99
100         if tosca and hasattr(tosca, 'version'):
101             print("\nversion: " + tosca.version)
102         else:
103             print("\nversion: " + "unknown")
104
105         if tosca and hasattr(tosca, 'description'):
106             description = tosca.description
107             if description:
108                 print("\ndescription: " + description)
109
110         if tosca and hasattr(tosca, 'inputs'):
111             inputs = tosca.inputs
112             if inputs:
113                 print("\ninputs:")
114                 for input in inputs:
115                     print("\t" + input.name)
116
117         if tosca and hasattr(tosca, 'nodetemplates'):
118             nodetemplates = tosca.nodetemplates
119             if nodetemplates:
120                 print("\nnodetemplates:")
121                 for node in nodetemplates:
122                     print("\t" + node.name)
123
124         # example of retrieving policy object
125         '''if hasattr(tosca, 'policies'):
126             policies = tosca.policies
127             if policies:
128                 print("policies:")
129                 for policy in policies:
130                     print("\t" + policy.name)
131                     if policy.triggers:
132                         print("\ttriggers:")
133                         for trigger in policy.triggers:
134                             print("\ttrigger name:" + trigger.name)'''
135
136         if tosca and hasattr(tosca, 'outputs'):
137             outputs = tosca.outputs
138             if outputs:
139                 print("\noutputs:")
140                 for output in outputs:
141                     print("\t" + output.name)
142
143
144 def main(args=None):
145     if args is None:
146         args = sys.argv[1:]
147     ParserShell().main(args)
148
149
150 if __name__ == '__main__':
151     main()