@classmethod
def parse(cls, event):
    """Given an event dictionary, gets the event schema and applies it to the dictionary, otherwise
        just returns the :class:`BaseEvent` from the dict.
        
        :param event: A :class:`dict` representing an event
        :return: A :class:`BaseEvent` subclass
        """
    if hasattr(cls, 'schema'):
        new_klass = cls()
        schema = new_klass.schema
        for key in event:
            new_klass[key] = schema.get(key, lambda x: x)(event[key])
    else:
        new_klass = cls(event)
    return new_klass
