<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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)