@gen.coroutine
  def _Check(self):
    # Get the follower object, check permissions, and determine if it's already been removed.
    self._follower = yield gen.Task(Follower.Query,
                                    self._client,
                                    self._user_id,
                                    self._viewpoint_id,
                                    None,
                                    must_exist=False)

    if self._follower is None:
      raise PermissionError('User %d does not have permission to remove viewpoint "%s", or it does not exist.' %
                            (self._user_id, self._viewpoint_id))

    if self._op.checkpoint is None:
      # The operation should not proceed if the viewpoint is already removed.
      if self._follower.IsRemoved():
        raise gen.Return(False)

      # Set checkpoint so that IsRemoved will not be checked on restart (since it will be updated
      # to True as part of this operation).
      yield self._op.SetCheckpoint(self._client, {'state': 'remove'})

    raise gen.Return(True)
Gathers pre-mutation information:
dataset/ETHPy150Open viewfinderco/viewfinder/backend/op/remove_viewpoint_op.py/RemoveViewpointOperation._Check