diff options
author | shangxdy <shang.xiaodong@zte.com.cn> | 2016-07-08 15:15:00 +0800 |
---|---|---|
committer | shangxdy <shang.xiaodong@zte.com.cn> | 2016-07-10 00:38:59 +0800 |
commit | 0997552722dc4845a854e0e6f8d7f18058e26380 (patch) | |
tree | b90d1e808bb326612211ba56b3b941516493398d /tosca2heat/tosca-parser/toscaparser/dataentity.py | |
parent | 7fe3011a67a239f7dc04153c54eaff78ef967eaf (diff) |
Synchronise the openstack bugs
When run unittests through tox, some test cases are always error,
the errors are already done in openstack community, so it's
necessary to synchronise the fixes.
Change-Id: Ib29078e6cc138a474e89c6a2cc90ad7a1db1bb46
JIRA: PARSER-63
Signed-off-by: shangxdy <shang.xiaodong@zte.com.cn>
Diffstat (limited to 'tosca2heat/tosca-parser/toscaparser/dataentity.py')
-rw-r--r-- | tosca2heat/tosca-parser/toscaparser/dataentity.py | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/tosca2heat/tosca-parser/toscaparser/dataentity.py b/tosca2heat/tosca-parser/toscaparser/dataentity.py index 6e7d59e..507c899 100644 --- a/tosca2heat/tosca-parser/toscaparser/dataentity.py +++ b/tosca2heat/tosca-parser/toscaparser/dataentity.py @@ -16,10 +16,10 @@ from toscaparser.common.exception import TypeMismatchError from toscaparser.common.exception import UnknownFieldError from toscaparser.elements.constraints import Schema from toscaparser.elements.datatype import DataType +from toscaparser.elements.portspectype import PortSpec from toscaparser.elements.scalarunit import ScalarUnit_Frequency from toscaparser.elements.scalarunit import ScalarUnit_Size from toscaparser.elements.scalarunit import ScalarUnit_Time - from toscaparser.utils.gettextutils import _ from toscaparser.utils import validateutils @@ -27,11 +27,13 @@ from toscaparser.utils import validateutils class DataEntity(object): '''A complex data value entity.''' - def __init__(self, datatypename, value_dict, custom_def=None): + def __init__(self, datatypename, value_dict, custom_def=None, + prop_name=None): self.custom_def = custom_def self.datatype = DataType(datatypename, custom_def) self.schema = self.datatype.get_all_properties() self.value = value_dict + self.property_name = prop_name def validate(self): '''Validate the value by the definition of the datatype.''' @@ -43,7 +45,7 @@ class DataEntity(object): self.value, None, self.custom_def) - schema = Schema(None, self.datatype.defs) + schema = Schema(self.property_name, self.datatype.defs) for constraint in schema.constraints: constraint.validate(self.value) # If the datatype has 'properties' definition @@ -89,7 +91,10 @@ class DataEntity(object): # check every field for name, value in list(self.value.items()): - prop_schema = Schema(name, self._find_schema(name)) + schema_name = self._find_schema(name) + if not schema_name: + continue + prop_schema = Schema(name, schema_name) # check if field value meets type defined DataEntity.validate_datatype(prop_schema.type, value, prop_schema.entry_schema, @@ -110,12 +115,16 @@ class DataEntity(object): return self.schema[name].schema @staticmethod - def validate_datatype(type, value, entry_schema=None, custom_def=None): + def validate_datatype(type, value, entry_schema=None, custom_def=None, + prop_name=None): '''Validate value with given type. If type is list or map, validate its entry by entry_schema(if defined) If type is a user-defined complex datatype, custom_def is required. ''' + from toscaparser.functions import is_function + if is_function(value): + return value if type == Schema.STRING: return validateutils.validate_string(value) elif type == Schema.INTEGER: @@ -123,7 +132,7 @@ class DataEntity(object): elif type == Schema.FLOAT: return validateutils.validate_float(value) elif type == Schema.NUMBER: - return validateutils.validate_number(value) + return validateutils.validate_numeric(value) elif type == Schema.BOOLEAN: return validateutils.validate_boolean(value) elif type == Schema.RANGE: @@ -149,6 +158,10 @@ class DataEntity(object): if entry_schema: DataEntity.validate_entry(value, entry_schema, custom_def) return value + elif type == Schema.PORTSPEC: + # TODO(TBD) bug 1567063, validate source & target as PortDef type + # as complex types not just as integers + PortSpec.validate_additional_req(value, prop_name, custom_def) else: data = DataEntity(type, value, custom_def) return data.validate() |