code: 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
docs: 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.