From e93b2c3597a1ad730a9fe52a8025ac6340e85c8e Mon Sep 17 00:00:00 2001 From: Sachin Bansal Date: Thu, 31 Mar 2016 11:43:53 -0700 Subject: [PATCH] Add checks for prop_type and parent types prop_type is a dictionary in the generated code. Removed the code that assumed it to be a tuple. Also, added checks for parent type. Change-Id: Id2228012f60ec6a714263f3f342f98742904c85d Closes-Bug: 1561253 Closes-Bug: 1563517 (cherry picked from commit dd062f386a790377aa67d3d24db032279dd1e860) --- src/config/api-server/vnc_cfg_api_server.py | 10 +++------- src/config/api-server/vnc_cfg_ifmap.py | 7 ++----- src/config/common/vnc_cassandra.py | 7 +++---- 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/src/config/api-server/vnc_cfg_api_server.py b/src/config/api-server/vnc_cfg_api_server.py index ed39d92ffe5..bf265f883cf 100644 --- a/src/config/api-server/vnc_cfg_api_server.py +++ b/src/config/api-server/vnc_cfg_api_server.py @@ -247,13 +247,9 @@ def _validate_simple_type(cls, type_name, xsd_type, value, restrictions=None): def _validate_props_in_request(self, resource_class, obj_dict): for prop_name in resource_class.prop_fields: prop_field_types = resource_class.prop_field_types[prop_name] - if isinstance(prop_field_types, dict): - is_simple = not prop_field_types['is_complex'] - prop_type = prop_field_types['xsd_type'] - restrictions = prop_field_types['restrictions'] - else: - is_simple, prop_type = prop_field_types - restrictions = None + is_simple = not prop_field_types['is_complex'] + prop_type = prop_field_types['xsd_type'] + restrictions = prop_field_types['restrictions'] is_list_prop = prop_name in resource_class.prop_list_fields is_map_prop = prop_name in resource_class.prop_map_fields diff --git a/src/config/api-server/vnc_cfg_ifmap.py b/src/config/api-server/vnc_cfg_ifmap.py index 072b2d3f340..842881c50bf 100644 --- a/src/config/api-server/vnc_cfg_ifmap.py +++ b/src/config/api-server/vnc_cfg_ifmap.py @@ -161,11 +161,8 @@ def object_set(self, res_type, my_imid, existing_metas, obj_dict): # construct object of xsd-type and get its xml repr # e.g. virtual_network_properties prop_field_types = obj_class.prop_field_types[prop_field] - if isinstance(prop_field_types, dict): - is_simple = not prop_field_types['is_complex'] - prop_type = prop_field_types['xsd_type'] - else: - is_simple, prop_type = prop_field_types + is_simple = not prop_field_types['is_complex'] + prop_type = prop_field_types['xsd_type'] # e.g. virtual-network-properties prop_meta = obj_class.prop_field_metas[prop_field] if is_simple: diff --git a/src/config/common/vnc_cassandra.py b/src/config/common/vnc_cassandra.py index 2167ee80b29..2efda0b45c9 100644 --- a/src/config/common/vnc_cassandra.py +++ b/src/config/common/vnc_cassandra.py @@ -424,6 +424,8 @@ def object_create(self, res_type, obj_id, obj_dict): if 'parent_type' in obj_dict: # non config-root child parent_type = obj_dict['parent_type'] + if parent_type not in obj_class.parent_types: + return False, (400, 'Invalid parent type: %s' % parent_type) parent_method_type = parent_type.replace('-', '_') parent_fq_name = obj_dict['fq_name'][:-1] obj_cols['parent_type'] = json.dumps(parent_type) @@ -558,10 +560,7 @@ def object_read(self, res_type, obj_uuids, field_names=None): obj_class.prop_map_field_has_wrappers[prop_name] if has_wrapper: prop_field_types = obj_class.prop_field_types[prop_name] - if isinstance(prop_field_types, dict): - wrapper_type = prop_field_types['xsd_type'] - else: - _, wrapper_type = prop_field_types + wrapper_type = prop_field_types['xsd_type'] wrapper_cls = self._get_xsd_class(wrapper_type) wrapper_field = wrapper_cls.attr_fields[0] if prop_name not in result: