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
5 # http://www.apache.org/licenses/LICENSE-2.0
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
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
25 CLI entry point to show how TOSCA Parser can be used programmatically
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.
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>
38 --template-file=toscaparser/tests/data/tosca_helloworld.yaml
40 --template-file=toscaparser/tests/data/CSAR/csar_hello_world.zip
43 log = logging.getLogger("tosca.model")
46 class ParserShell(object):
48 def get_parser(self, argv):
49 parser = argparse.ArgumentParser(prog="tosca-parser")
51 parser.add_argument('--template-file',
54 help=_('YAML template or CSAR file to parse.'))
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.'))
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'))
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
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,
83 raise ValueError(_('"%(path)s" is not a valid file.')
86 def parse(self, path, a_file=True, no_required_paras_check=False,
88 nrpv = no_required_paras_check
90 tosca = ToscaTemplate(path, None, a_file,
91 no_required_paras_check=nrpv,
92 debug_mode=debug_mode)
93 except ValidationError as e:
94 msg = _(' ===== main service template ===== ')
103 version = tosca.version if tosca else "unknown"
104 if tosca and tosca.version:
105 print("\nversion: " + version)
107 if tosca and hasattr(tosca, 'description'):
108 description = tosca.description
110 print("\ndescription: " + description)
112 if tosca and hasattr(tosca, 'inputs'):
113 inputs = tosca.inputs
117 print("\t" + input.name)
119 if tosca and hasattr(tosca, 'nodetemplates'):
120 nodetemplates = tosca.nodetemplates
122 print("\nnodetemplates:")
123 for node in nodetemplates:
124 print("\t" + node.name)
126 # example of retrieving policy object
127 '''if hasattr(tosca, 'policies'):
128 policies = tosca.policies
131 for policy in policies:
132 print("\t" + policy.name)
135 for trigger in policy.triggers:
136 print("\ttrigger name:" + trigger.name)'''
138 if tosca and hasattr(tosca, 'outputs'):
139 outputs = tosca.outputs
142 for output in outputs:
143 print("\t" + output.name)
149 ParserShell().main(args)
152 if __name__ == '__main__':