def revision_tag_delete(revision_id, tag, session=None): """Delete a specific tag for a revision. :param revision_id: ID corresponding to ``Revision`` DB object. :param tag: Name of the revision tag. :param session: Database session object. :returns: None """ query = raw_query( """DELETE FROM revision_tags WHERE tag=:tag AND revision_id=:revision_id;""", tag=tag, revision_id=revision_id) if query.rowcount == 0: raise errors.RevisionTagNotFound(tag=tag, revision=revision_id)
def revision_tag_delete(revision_id, tag, session=None): """Delete a specific tag for a revision. :param revision_id: ID corresponding to ``Revision`` DB object. :param tag: Name of the revision tag. :param session: Database session object. :returns: None """ session = session or get_session() result = session.query(models.RevisionTag)\ .filter_by(tag=tag, revision_id=revision_id)\ .delete(synchronize_session=False) if result == 0: raise errors.RevisionTagNotFound(tag=tag, revision=revision_id)
def revision_tag_create(revision_id, tag, data=None, session=None): """Create a revision tag. If a tag already exists by name ``tag``, the request is ignored. :param revision_id: ID corresponding to ``Revision`` DB object. :param tag: Name of the revision tag. :param data: Dictionary of data to be associated with tag. :param session: Database session object. :returns: The tag that was created if not already present in the database, else None. :raises RevisionTagBadFormat: If data is neither None nor dictionary. """ session = session or get_session() tag_model = models.RevisionTag() if data is None: data = {} if data and not isinstance(data, dict): raise errors.RevisionTagBadFormat(data=data) try: with session.begin(): tag_model.update({ 'tag': tag, 'data': data, 'revision_id': revision_id }) tag_model.save(session=session) resp = tag_model.to_dict() except db_exception.DBDuplicateEntry: # Update the revision tag if it already exists. LOG.debug( 'Tag %s already exists for revision_id %s. Attempting to ' 'update the entry.', tag, revision_id) try: tag_to_update = session.query(models.RevisionTag)\ .filter_by(tag=tag, revision_id=revision_id)\ .one() except sa_orm.exc.NoResultFound: raise errors.RevisionTagNotFound(tag=tag, revision=revision_id) tag_to_update.update({'data': data}) tag_to_update.save(session=session) resp = tag_to_update.to_dict() return resp
def revision_tag_get(revision_id, tag, session=None): """Retrieve tag details. :param revision_id: ID corresponding to ``Revision`` DB object. :param tag: Name of the revision tag. :param session: Database session object. :returns: None :raises RevisionTagNotFound: If ``tag`` for ``revision_id`` was not found. """ session = session or get_session() try: tag = session.query(models.RevisionTag)\ .filter_by(tag=tag, revision_id=revision_id)\ .one() except sa_orm.exc.NoResultFound: raise errors.RevisionTagNotFound(tag=tag, revision=revision_id) return tag.to_dict()