code: def pop(self):
          
          revisions = yield self.list()
  
          if len(revisions) > 0:
              revision = revisions[0]
  
              # Update type action
              if revision.get("action") == self.UPDATE_ACTION:
                  try:
                      yield self.__update_action(revision)
                  except Exception as ex:
                      self.logger.error(ex)
  
              # Insert type update
              if revision.get("action") == self.INSERT_ACTION:
                  try:
                      yield self.__insert_action(revision)
                  except Exception as ex:
                      self.logger.error(ex)
  
              #Get the updated object for attachment to the snapshot
              snapshot_object = yield self.collection.find_one_by_id(revision.get("master_id"))
  
              #Handle delete action here
              if revision.get("action") == self.DELETE_ACTION:
                  try:
                      yield self.__delete_action(revision)
                  except Exception as ex:
                      self.logger.error(ex)
  
                  snapshot_object = None
  
              #Update the revision to be in a post-process state including snapshot
              revision_update_response = yield self.revisions.patch(revision.get("id"),
                  {
                      "processed" : True,
                      "snapshot" : snapshot_object,
                      "inProcess": False
                  }
              )
  
              if revision_update_response.get("n") == 0:
                  raise RevisionUpdateFailed(msg="revision document update failed")
  
              revision = yield self.revisions.find_one_by_id(revision.get("id"))
  
              #TODO: Make this callback method something that can be passed in.  This was used in
              #the original implementation to send back to the client via websocket
              #revision_success.send('revision_success', type="RevisionSuccess", data=revision)
  
              raise Return(revision)
  
          raise Return(None)
docs: Pop the top revision off the stack back onto the collection at the given id. This method applies the action.
  
          Note: This assumes you don't have two revisions scheduled closer than a single scheduling cycle.