diff options
Diffstat (limited to 'tosca2heat/tosca-parser/toscaparser')
5 files changed, 55 insertions, 27 deletions
diff --git a/tosca2heat/tosca-parser/toscaparser/elements/capabilitytype.py b/tosca2heat/tosca-parser/toscaparser/elements/capabilitytype.py index 5fa9661..23c5afc 100644 --- a/tosca2heat/tosca-parser/toscaparser/elements/capabilitytype.py +++ b/tosca2heat/tosca-parser/toscaparser/elements/capabilitytype.py @@ -25,7 +25,7 @@ class CapabilityTypeDef(StatefulEntityType): self.nodetype = ntype self.properties = None self.custom_def = custom_def - if self.PROPERTIES in self.defs: + if self.defs and self.PROPERTIES in self.defs: self.properties = self.defs[self.PROPERTIES] self.parent_capabilities = self._get_parent_capabilities(custom_def) diff --git a/tosca2heat/tosca-parser/toscaparser/elements/statefulentitytype.py b/tosca2heat/tosca-parser/toscaparser/elements/statefulentitytype.py index 2f221b3..28ee697 100644 --- a/tosca2heat/tosca-parser/toscaparser/elements/statefulentitytype.py +++ b/tosca2heat/tosca-parser/toscaparser/elements/statefulentitytype.py @@ -46,7 +46,8 @@ class StatefulEntityType(EntityType): elif custom_def and entitytype in list(custom_def.keys()): self.defs = custom_def[entitytype] else: - self.defs = None + # avoid errors if self.defs = none + self.defs = {} ExceptionCollector.appendException( InvalidTypeError(what=entitytype)) self.type = entitytype diff --git a/tosca2heat/tosca-parser/toscaparser/parameters.py b/tosca2heat/tosca-parser/toscaparser/parameters.py index 0e24b99..d2d2eb3 100644 --- a/tosca2heat/tosca-parser/toscaparser/parameters.py +++ b/tosca2heat/tosca-parser/toscaparser/parameters.py @@ -92,7 +92,7 @@ class Input(object): elif EntityType.DATATYPE_NETWORK_PREFIX + self.type in tosca: datatype = tosca[EntityType.DATATYPE_NETWORK_PREFIX + self.type] elif self.type in self.custom_defs: - datatype = self.custom_defs[self.type] + datatype = self.custom_defs DataEntity.validate_datatype(self.type, value, None, datatype) diff --git a/tosca2heat/tosca-parser/toscaparser/shell.py b/tosca2heat/tosca-parser/toscaparser/shell.py index f669e27..ba9c28f 100644 --- a/tosca2heat/tosca-parser/toscaparser/shell.py +++ b/tosca2heat/tosca-parser/toscaparser/shell.py @@ -53,55 +53,70 @@ class ParserShell(object): required=True, help=_('YAML template or CSAR file to parse.')) - parser.add_argument('-nrpv', dest='no_required_paras_valid', + parser.add_argument('-nrpv', dest='no_required_paras_check', action='store_true', default=False, help=_('Ignore input parameter validation ' 'when parse template.')) + parser.add_argument('--debug', dest='debug_mode', + action='store_true', default=False, + help=_('debug mode for print more details ' + 'other than raise exceptions when ' + 'errors happen as possible')) + return parser def main(self, argv): parser = self.get_parser(argv) (args, extra_args) = parser.parse_known_args(argv) path = args.template_file - nrpv = args.no_required_paras_valid + nrpv = args.no_required_paras_check + debug = args.debug_mode + if os.path.isfile(path): - self.parse(path, no_req_paras_valid=nrpv) + self.parse(path, no_required_paras_check=nrpv, debug_mode=debug) elif toscaparser.utils.urlutils.UrlUtils.validate_url(path): - self.parse(path, False, no_req_paras_valid=nrpv) + self.parse(path, False, + no_required_paras_check=nrpv, + debug_mode=debug) else: raise ValueError(_('"%(path)s" is not a valid file.') % {'path': path}) - def parse(self, path, a_file=True, no_req_paras_valid=False): - output = None - tosca = None + def parse(self, path, a_file=True, no_required_paras_check=False, + debug_mode=False): + nrpv = no_required_paras_check try: tosca = ToscaTemplate(path, None, a_file, - no_required_paras_valid=no_req_paras_valid) + no_required_paras_check=nrpv, + debug_mode=debug_mode) except ValidationError as e: msg = _(' ===== main service template ===== ') log.error(msg) log.error(e.message) - raise e - - version = tosca.version - if tosca.version: + if debug_mode: + print(msg) + print(e.message) + else: + raise e + + version = tosca.version if tosca else "unknown" + if tosca and tosca.version: print("\nversion: " + version) - if hasattr(tosca, 'description'): + if tosca and hasattr(tosca, 'description'): description = tosca.description if description: print("\ndescription: " + description) - if hasattr(tosca, 'inputs'): + if tosca and hasattr(tosca, 'inputs'): inputs = tosca.inputs if inputs: print("\ninputs:") for input in inputs: print("\t" + input.name) - if hasattr(tosca, 'nodetemplates'): + if tosca and hasattr(tosca, 'nodetemplates'): nodetemplates = tosca.nodetemplates if nodetemplates: print("\nnodetemplates:") @@ -120,7 +135,7 @@ class ParserShell(object): for trigger in policy.triggers: print("\ttrigger name:" + trigger.name)''' - if hasattr(tosca, 'outputs'): + if tosca and hasattr(tosca, 'outputs'): outputs = tosca.outputs if outputs: print("\noutputs:") diff --git a/tosca2heat/tosca-parser/toscaparser/tosca_template.py b/tosca2heat/tosca-parser/toscaparser/tosca_template.py index c961941..c9be9dd 100644 --- a/tosca2heat/tosca-parser/toscaparser/tosca_template.py +++ b/tosca2heat/tosca-parser/toscaparser/tosca_template.py @@ -69,7 +69,8 @@ class ToscaTemplate(object): '''Load the template data.''' def __init__(self, path=None, parsed_params=None, a_file=True, yaml_dict_tpl=None, sub_mapped_node_template=None, - no_required_paras_valid=False): + no_required_paras_check=False, + debug_mode=False): if sub_mapped_node_template is None: ExceptionCollector.start() self.a_file = a_file @@ -79,7 +80,9 @@ class ToscaTemplate(object): self.sub_mapped_node_template = sub_mapped_node_template self.nested_tosca_tpls_with_topology = {} self.nested_tosca_templates_with_topology = [] - self.no_required_paras_valid = no_required_paras_valid + self.no_required_paras_check = no_required_paras_check + self.debug_mode = debug_mode + if path: self.input_path = path self.path = self._get_path(path) @@ -244,16 +247,20 @@ class ToscaTemplate(object): deepcopy(ExceptionCollector.collecting) nested_template = None try: - nrpv = self.no_required_paras_valid + nrpv = self.no_required_paras_check nested_template = ToscaTemplate( path=fname, parsed_params=parsed_params, sub_mapped_node_template=nodetemplate, - no_required_paras_valid=nrpv) + no_required_paras_check=nrpv) except ValidationError as e: msg = _(' ===== nested service template ===== ') log.error(msg) log.error(e.message) - raise e + if self.debug_mode: + print(msg) + print(e.message) + else: + raise e ExceptionCollector.exceptions = deepcopy(cache_exeptions) ExceptionCollector.collecting = \ @@ -312,21 +319,26 @@ class ToscaTemplate(object): def verify_template(self): if ExceptionCollector.exceptionsCaught(): - if self.no_required_paras_valid: + if self.no_required_paras_check: ExceptionCollector.removeException( MissingRequiredParameterError) if self.input_path: - raise ValidationError( + exceptions = ValidationError( message=(_('\nThe input "%(path)s" failed validation with ' 'the following error(s): \n\n\t') % {'path': self.input_path}) + '\n\t'.join(ExceptionCollector.getExceptionsReport())) else: - raise ValidationError( + exceptions = ValidationError( message=_('\nThe pre-parsed input failed validation with ' 'the following error(s): \n\n\t') + '\n\t'.join(ExceptionCollector.getExceptionsReport())) + if not self.debug_mode: + raise exceptions + else: + print(exceptions.message) + log.error(exceptions.message) else: if self.input_path: msg = (_('The input "%(path)s" successfully passed ' |