def redirect(self, pid):
        """Redirect persistent identifier to another persistent identifier.

        :param pid: The :class:`invenio_pidstore.models.PersistentIdentifier`
            where redirect the PID.
        :raises invenio_pidstore.errors.PIDInvalidAction: If the PID is not
            registered or is not already redirecting to another PID.
        :raises invenio_pidstore.errors.PIDDoesNotExistError: If PID is not
            found.
        :returns: `True` if the PID is successfully redirect.
        """
        if not (self.is_registered() or self.is_redirected()):
            raise PIDInvalidAction("Persistent identifier is not registered.")

        try:
            with db.session.begin_nested():
                if self.is_redirected():
                    r = Redirect.query.get(self.object_uuid)
                    r.pid = pid
                else:
                    with db.session.begin_nested():
                        r = Redirect(pid=pid)
                        db.session.add(r)

                self.status = PIDStatus.REDIRECTED
                self.object_type = None
                self.object_uuid = r.id
                db.session.add(self)
        except IntegrityError:
            raise PIDDoesNotExistError(pid.pid_type, pid.pid_value)
        except SQLAlchemyError:
            logger.exception("Failed to redirect to {0}".format(
                pid), extra=dict(pid=self))
            raise
        logger.info("Redirected PID to {0}".format(pid), extra=dict(pid=self))
        return True
def redirect ( self , pid ) : if not ( self . is_registered ( ) or self . is_redirected ( ) ) : raise PIDInvalidAction ( "Persistent identifier is not registered." ) try : with db . session . begin_nested ( ) : if self . is_redirected ( ) : r = Redirect . query . get ( self . object_uuid ) r . pid = pid else : with db . session . begin_nested ( ) : r = Redirect ( pid = pid ) db . session . add ( r ) self . status = PIDStatus . REDIRECTED self . object_type = None self . object_uuid = r . id db . session . add ( self ) except IntegrityError : raise PIDDoesNotExistError ( pid . pid_type , pid . pid_value ) except SQLAlchemyError : logger . exception ( "Failed to redirect to {0}" . format ( pid ) , extra = dict ( pid = self ) ) raise logger . info ( "Redirected PID to {0}" . format ( pid ) , extra = dict ( pid = self ) ) return True
Redirect persistent identifier to another persistent identifier.

        :param pid: The :class:`invenio_pidstore.models.PersistentIdentifier`
            where redirect the PID.
        :raises invenio_pidstore.errors.PIDInvalidAction: If the PID is not
            registered or is not already redirecting to another PID.
        :raises invenio_pidstore.errors.PIDDoesNotExistError: If PID is not
            found.
        :returns: `True` if the PID is successfully redirect.