code: def push(self, read_time, next_resume_token):
          
          deletes, adds, updates = Watch._extract_changes(
              self.doc_map, self.change_map, read_time
          )
  
          updated_tree, updated_map, appliedChanges = self._compute_snapshot(
              self.doc_tree, self.doc_map, deletes, adds, updates
          )
  
          if not self.has_pushed or len(appliedChanges):
              # TODO: It is possible in the future we will have the tree order
              # on insert. For now, we sort here.
              key = functools.cmp_to_key(self._comparator)
              keys = sorted(updated_tree.keys(), key=key)
  
              self._snapshot_callback(
                  keys,
                  appliedChanges,
                  datetime.datetime.fromtimestamp(read_time.seconds, pytz.utc),
              )
              self.has_pushed = True
  
          self.doc_tree = updated_tree
          self.doc_map = updated_map
          self.change_map.clear()
          self.resume_token = next_resume_token
docs: Assembles a new snapshot from the current set of changes and invokes
          the user's callback. Clears the current changes on completion.