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)
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)
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'])
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