def add_item(context, kind, data, project_id=None):
    if not project_id:
        project_id = context.project_id
    item_ref = models.Item()
    item_ref.update({
        "project_id": project_id,
        "id": _new_id(kind, data.get("os_id")),
    })
    item_ref.update(_pack_item_data(data))
    try:
        item_ref.save()
    except db_exception.DBDuplicateEntry as ex:
        if (models.ITEMS_OS_ID_INDEX_NAME not in ex.columns
                and 'os_id' not in ex.columns):
            raise
        item_ref = (model_query(
            context, models.Item).filter_by(os_id=data["os_id"]).filter(
                or_(models.Item.project_id == project_id,
                    models.Item.project_id.is_(None))).filter(
                        models.Item.id.like('%s-%%' % kind)).one())
        item_data = _unpack_item_data(item_ref)
        item_data.update(data)
        item_ref.update(_pack_item_data(item_data))
        item_ref.project_id = project_id
        item_ref.save()
    return _unpack_item_data(item_ref)
示例#2
0
def restore_item(context, kind, data):
    item_ref = models.Item()
    item_ref.update({
        "project_id": context.project_id,
    })
    item_ref.id = data['id']
    item_ref.update(_pack_item_data(data))
    item_ref.save()
    return _unpack_item_data(item_ref)
示例#3
0
def restore_item(context, kind, data):
    try:
        item_ref = models.Item()
        item_ref.update({
            "project_id": context.project_id,
        })
        item_ref.id = data['id']
        item_ref.update(_pack_item_data(data))
        item_ref.save()
        return _unpack_item_data(item_ref)
    except db_exception.DBDuplicateEntry:
        raise exception.EC2DBDuplicateEntry(id=data['id'])
示例#4
0
def add_item_id(context, kind, os_id, project_id=None):
    item_ref = models.Item()
    item_ref.update({
        "id": _new_id(kind),
        "os_id": os_id,
    })
    if project_id:
        item_ref.project_id = project_id
    try:
        item_ref.save()
    except db_exception.DBDuplicateEntry as ex:
        if (models.ITEMS_OS_ID_INDEX_NAME not in ex.columns
                and ex.columns != ['os_id']):
            raise
        item_ref = (model_query(context,
                                models.Item).filter_by(os_id=os_id).one())
    return item_ref.id