def _handle_list_value()

in rostran/core/properties.py [0:0]


def _handle_list_value(name_part, cur_value, expression, data=None):
    if not isinstance(cur_value, list):
        raise ConflictDataTypeInExpression(expression=expression)

    indexes = LIST_INDEX_PATTERN.findall(name_part)
    indexes_length = len(indexes)
    for j, index in enumerate(indexes):
        index = int(index)
        if index < 0:
            raise InvalidIndexInExpression(index=index, expression=expression)
        if index > len(cur_value):
            raise DiscontinuousIndexInExpression(index=index, expression=expression)
        elif index == len(cur_value):
            if j < indexes_length - 1:
                cur_value.append([])
            elif data is None:
                cur_value.append({})
            else:
                cur_value.append(data)
        cur_value = cur_value[index]
    return cur_value