summaryrefslogtreecommitdiffstats
path: root/tosca2heat/tosca-parser/toscaparser
diff options
context:
space:
mode:
Diffstat (limited to 'tosca2heat/tosca-parser/toscaparser')
-rw-r--r--tosca2heat/tosca-parser/toscaparser/elements/capabilitytype.py2
-rw-r--r--tosca2heat/tosca-parser/toscaparser/elements/statefulentitytype.py3
-rw-r--r--tosca2heat/tosca-parser/toscaparser/parameters.py2
-rw-r--r--tosca2heat/tosca-parser/toscaparser/shell.py47
-rw-r--r--tosca2heat/tosca-parser/toscaparser/tosca_template.py28
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 '