'Captures and processes an event and pipes it off to SentryClient.send.
To use structured data (interfaces) with capture:
>>> capture(\'raven.events.Message\', message=\'foo\', data={
>>>     \'request\': {
>>>         \'url\': \'...\',
>>>         \'data\': {},
>>>         \'query_string\': \'...\',
>>>         \'method\': \'POST\',
>>>     \'logger\': \'logger.name\',
>>> }, extra={
>>>     \'key\': \'value\',
The finalized ``data`` structure contains the following (some optional)
builtin values:
>>>     # the culprit and version information
>>>     \'culprit\': \'full.module.name\', # or /arbitrary/path
>>>     # all detectable installed modules
>>>     \'modules\': {
>>>         \'full.module.name\': \'version string\',
>>>     # arbitrary data provided by user
>>>     \'extra\': {
>>>         \'key\': \'value\',
:param event_type: the module path to the Event class. Builtins can use
shorthand class notation and exclude the full module
path.
:param data: the data base, useful for specifying structured data
interfaces. Any key which contains a \'.\' will be
assumed to be a data interface.
:param date: the datetime of this event
:param time_spent: a integer value representing the duration of the
event (in milliseconds)
:param extra: a dictionary of additional standard metadata
:param stack: a stacktrace for the event
:param tags: dict of extra tags
:param sample_rate: a float in the range [0, 1] to sample this message
:return: a tuple with a 32-length string identifying this event'

def capture(self, event_type, data=None, date=None, time_spent=None, extra=None, stack=None, tags=None, sample_rate=None, **kwargs):

    if (not self.is_enabled()):
        return
    exc_info = kwargs.get('exc_info')
    if (exc_info is not None):
        if self.skip_error_for_logging(exc_info):
            return
        elif (not self.should_capture(exc_info)):
            self.logger.info('Not    capturing    exception    due    to    filters:    %s', exc_info[0], exc_info=sys.exc_info())
            return
        self.record_exception_seen(exc_info)
    data = self.build_msg(event_type, data, date, time_spent, extra, stack, tags=tags, **kwargs)
    if (sample_rate is None):
        sample_rate = self.sample_rate
    if (self._random.random() < sample_rate):
        self.send(**data)
    self._local_state.last_event_id = data['event_id']
    return data['event_id']
