def __make_inner_obj(cls, input_val, key_path): inner_obj = {} t = type(input_val) if t is not dict: input_val = {cls.get_container_default(key_path): input_val} for inner_key in input_val: inner_key_path = key_path + '/' + inner_key nab.dbg_print('input_val = ', input_val) nab.dbg_print('inner_key_path = ', inner_key_path) cls.add_attr(inner_obj, inner_key_path, input_val[inner_key]) return inner_obj
def __make_subobj_val( self, elem_type, key_prefix, input_val, val_name_map, out_subobj): if elem_type not in val_name_map: # No data for this element return out_subobj key_path = key_prefix + val_name_map[elem_type] nab.dbg_print( 'key_path= ', key_path, ' ', self.get_attr_map()[key_path]) if self.is_attr_leaf (key_path) or \ self.is_attr_leaflist(key_path): # Leaf value - Input val is a direct value self.add_attr(out_subobj, key_path, input_val) return out_subobj # Non-leaf - Filter or Action Value is a Container or a List of # containers if self.is_attr_list(key_path): # List of containers inner_obj = {} t = type(input_val) if t is list: ilist = 0 for inp in input_val: inner_obj[str(ilist)] = self.__make_inner_obj( inp, key_path) ilist = ilist + 1 else: inner_obj[str(0)] = self.__make_inner_obj(input_val, key_path) nab.dbg_print('List inner_obj = ', inner_obj) else: # Container inner_obj = self.__make_inner_obj(input_val, key_path) nab.dbg_print('inner_obj = ', inner_obj) self.add_attr(out_subobj, key_path, inner_obj) return out_subobj
def __make_subobj_val(self, elem_type, key_prefix, input_val, val_name_map, out_subobj): if input_val is None or elem_type not in val_name_map: # No data for this element return out_subobj key_path = key_prefix + val_name_map[elem_type] nab.dbg_print('key_path= ', key_path, ' ', self.get_attr_map()[key_path]) if self.is_attr_leaf (key_path) or \ self.is_attr_leaflist(key_path): # Leaf value - Input val is a direct value self.add_attr(out_subobj, key_path, input_val) return out_subobj # Non-leaf - Filter or Action Value is a Container or a List of # containers if self.is_attr_list(key_path): # List of containers inner_obj = {} t = type(input_val) if t is list: ilist = 0 for inp in input_val: inner_obj[str(ilist)] = self.__make_inner_obj( inp, key_path) ilist = ilist + 1 else: inner_obj[str(0)] = self.__make_inner_obj(input_val, key_path) nab.dbg_print('List inner_obj = ', inner_obj) else: # Container inner_obj = self.__make_inner_obj(input_val, key_path) nab.dbg_print('inner_obj = ', inner_obj) self.add_attr(out_subobj, key_path, inner_obj) return out_subobj