def test_extra(self): context = Context() context.merge({'extra': {'foo': 'bar'}}) context.merge({'extra': {'biz': 'baz'}}) assert context.get() == { 'extra': { 'foo': 'bar', 'biz': 'baz', } }
def __init__(self, dsn=None, raise_send_errors=False, transport=None, install_sys_hook=True, **options): global Raven o = options self.configure_logging() self.raise_send_errors = raise_send_errors # configure loggers first cls = self.__class__ self.state = ClientState() self.logger = logging.getLogger( '%s.%s' % (cls.__module__, cls.__name__)) self.error_logger = logging.getLogger('sentry.errors') self.uncaught_logger = logging.getLogger('sentry.errors.uncaught') self._transport_cache = {} self.set_dsn(dsn, transport) self.include_paths = set(o.get('include_paths') or []) self.exclude_paths = set(o.get('exclude_paths') or []) self.name = six.text_type(o.get('name') or o.get('machine') or defaults.NAME) self.auto_log_stacks = bool( o.get('auto_log_stacks') or defaults.AUTO_LOG_STACKS) self.capture_locals = bool( o.get('capture_locals', defaults.CAPTURE_LOCALS)) self.string_max_length = int( o.get('string_max_length') or defaults.MAX_LENGTH_STRING) self.list_max_length = int( o.get('list_max_length') or defaults.MAX_LENGTH_LIST) self.site = o.get('site') self.include_versions = o.get('include_versions', True) self.processors = o.get('processors') if self.processors is None: self.processors = defaults.PROCESSORS context = o.get('context') if context is None: context = {'sys.argv': sys.argv[:]} self.extra = context self.tags = o.get('tags') or {} self.environment = o.get('environment') or None self.release = o.get('release') or os.environ.get('HEROKU_SLUG_COMMIT') self.module_cache = ModuleProxyCache() if not self.is_enabled(): self.logger.info( 'Raven is not configured (logging is disabled). Please see the' ' documentation for more information.') if Raven is None: Raven = self self._context = Context() if install_sys_hook: self.install_sys_hook()
def test_simple(self): context = Context() context.merge({'foo': 'bar'}) context.merge({'biz': 'baz'}) context.merge({'biz': 'boz'}) assert context.get() == { 'foo': 'bar', 'biz': 'boz', }
def context(self, **kwargs): """ Create default context around a block of code for exception management. >>> with client.context(tags={'key': 'value'}) as raven: >>> # use the context manager's client reference >>> raven.captureMessage('hello!') >>> >>> # uncaught exceptions also contain the context >>> 1 / 0 """ return Context(self, **kwargs)
def __init__(self, dsn=None, raise_send_errors=False, transport=None, install_sys_hook=True, install_logging_hook=True, hook_libraries=None, enable_breadcrumbs=True, _random_seed=None, **options): global Raven o = options self._local_state = local() self.raise_send_errors = raise_send_errors # configure loggers first cls = self.__class__ self.state = ClientState() self.logger = logging.getLogger('%s.%s' % (cls.__module__, cls.__name__)) self.error_logger = logging.getLogger('sentry.errors') self.uncaught_logger = logging.getLogger('sentry.errors.uncaught') self._transport_cache = {} self.set_dsn(dsn, transport) self.include_paths = set(o.get('include_paths') or []) self.exclude_paths = set(o.get('exclude_paths') or []) self.name = text_type( o.get('name') or o.get('machine') or defaults.NAME) self.auto_log_stacks = bool( o.get('auto_log_stacks') or defaults.AUTO_LOG_STACKS) self.capture_locals = bool( o.get('capture_locals', defaults.CAPTURE_LOCALS)) self.string_max_length = int( o.get('string_max_length') or defaults.MAX_LENGTH_STRING) self.list_max_length = int( o.get('list_max_length') or defaults.MAX_LENGTH_LIST) self.site = o.get('site') self.include_versions = o.get('include_versions', True) self.processors = o.get('processors') if self.processors is None: self.processors = defaults.PROCESSORS context = o.get('context') if context is None: context = {'sys.argv': getattr(sys, 'argv', [])[:]} self.extra = context self.tags = o.get('tags') or {} self.environment = o.get('environment') or None self.release = o.get('release') or os.environ.get('HEROKU_SLUG_COMMIT') self.repos = self._format_repos(o.get('repos')) self.sample_rate = (o.get('sample_rate') if o.get('sample_rate') is not None else 1) self.transaction = TransactionStack() self.ignore_exceptions = set(o.get('ignore_exceptions') or ()) self.module_cache = ModuleProxyCache() self._random = Random(_random_seed) if not self.is_enabled(): self.logger.info( 'Raven is not configured (logging is disabled). Please see the' ' documentation for more information.') if Raven is None: Raven = self # We want to remember the creating thread id here because this # comes in useful for the context special handling self.main_thread_id = get_thread_ident() self.enable_breadcrumbs = enable_breadcrumbs from raven.context import Context self._context = Context(self) if install_sys_hook: self.install_sys_hook() if install_logging_hook: self.install_logging_hook() self.hook_libraries(hook_libraries)
def deactivate(self): called.append('deactivate') Context.deactivate(self)
def activate(self): Context.activate(self) called.append('activate')
def context(self, **kwargs): return Context(self.client, **kwargs)
def __init__(self, dsn=None, **options): global Raven o = options self.configure_logging() # configure loggers first cls = self.__class__ self.state = ClientState() self.logger = logging.getLogger('%s.%s' % (cls.__module__, cls.__name__)) self.error_logger = logging.getLogger('sentry.errors') if dsn is None and os.environ.get('SENTRY_DSN'): msg = "Configuring Raven from environment variable 'SENTRY_DSN'" self.logger.debug(msg) dsn = os.environ['SENTRY_DSN'] if dsn: # TODO: should we validate other options werent sent? urlparts = urlparse(dsn) self.logger.debug( "Configuring Raven for host: %s://%s:%s" % (urlparts.scheme, urlparts.netloc, urlparts.path)) dsn_config = raven.load(dsn, transport_registry=self._registry) servers = dsn_config['SENTRY_SERVERS'] project = dsn_config['SENTRY_PROJECT'] public_key = dsn_config['SENTRY_PUBLIC_KEY'] secret_key = dsn_config['SENTRY_SECRET_KEY'] transport_options = dsn_config.get('SENTRY_TRANSPORT_OPTIONS', {}) else: if o.get('servers'): warnings.warn( 'Manually configured connections are deprecated. Switch to a DSN.', DeprecationWarning) servers = o.get('servers') project = o.get('project') public_key = o.get('public_key') secret_key = o.get('secret_key') transport_options = {} self.servers = servers self.public_key = public_key self.secret_key = secret_key self.project = project or defaults.PROJECT self.transport_options = transport_options self.include_paths = set(o.get('include_paths') or []) self.exclude_paths = set(o.get('exclude_paths') or []) self.name = six.text_type(o.get('name') or defaults.NAME) self.auto_log_stacks = bool( o.get('auto_log_stacks') or defaults.AUTO_LOG_STACKS) self.string_max_length = int( o.get('string_max_length') or defaults.MAX_LENGTH_STRING) self.list_max_length = int( o.get('list_max_length') or defaults.MAX_LENGTH_LIST) self.site = o.get('site', defaults.SITE) self.include_versions = o.get('include_versions', True) self.processors = o.get('processors') if self.processors is None: self.processors = defaults.PROCESSORS context = o.get('context') if context is None: context = {'sys.argv': sys.argv[:]} self.extra = context self.tags = o.get('tags') or {} self.module_cache = ModuleProxyCache() # servers may be set to a NoneType (for Django) if not self.is_enabled(): self.logger.info( 'Raven is not configured (logging is disabled). Please see the' ' documentation for more information.') if Raven is None: Raven = self self._context = Context()