예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
    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
예제 #4
0
    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