docs: def process(self, user, timestamp, data=None):
          """
          Processes a user event.
  
          :Parameters:
              user : `hashable`
                  A hashable value to identify a user (`int` or `str` are OK)
              timestamp : :class:`mwtypes.Timestamp`
                  The timestamp of the event
              data : `mixed`
                  Event meta data
  
          :Returns:
              A generator of :class:`~mwsessions.Session` expired after
              processing the user event.
          """
          event = Event(user, mwtypes.Timestamp(timestamp), self.event_i, data)
          self.event_i += 1
  
          for user, events in self._clear_expired(event.timestamp):
              yield Session(user, unpack_events(events))
  
          # Apply revision
          if event.user in self.active_users:
              events = self.active_users[event.user]
          else:
              events = []
              self.active_users[event.user] = events
              active_session = ActiveSession(event.timestamp, event.i, events)
              self.recently_active.push(active_session)
  
          events.append(event)