diff options
author | David Cramer <dcramer@gmail.com> | 2012-12-29 21:10:40 -0800 |
---|---|---|
committer | David Cramer <dcramer@gmail.com> | 2012-12-29 21:10:40 -0800 |
commit | 0fb5a9c108be5145cf7efb86e9cb5561d5c7a454 (patch) | |
tree | 6578a97fdd1e6facea708fe1318695f506fa058e | |
parent | e2393f84cbecf6095df407bc8ac70739358e8a5e (diff) | |
download | raven-guess-parent-module.tar.gz |
Some initial work on guessing calling module name to add to include pathsguess-parent-module
-rw-r--r-- | raven/base.py | 8 | ||||
-rw-r--r-- | raven/utils/stacks.py | 15 | ||||
-rw-r--r-- | tests/transport/tests.py | 1 |
3 files changed, 22 insertions, 2 deletions
diff --git a/raven/base.py b/raven/base.py index b25896d..3cca0a3 100644 --- a/raven/base.py +++ b/raven/base.py @@ -26,7 +26,7 @@ from raven.utils import json, get_versions, get_auth_header from raven.utils.encoding import to_string from raven.utils.serializer import transform from raven.utils.stacks import get_stack_info, iter_stack_frames, \ - get_culprit + get_culprit, guess_parent_module from raven.utils.urlparse import urlparse from raven.transport.registry import TransportRegistry, default_transports @@ -174,6 +174,12 @@ class Client(object): self.module_cache = ModuleProxyCache() + # if no include_paths were provided, attempt to detect the calling module and add + # it's root namepsace as our include path. + if not self.include_paths: + parent_module = guess_parent_module() + self.include_paths.add(parent_module) + # servers may be set to a NoneType (for Django) if not self.is_enabled(): self.logger.info('Raven is not configured (disabled). Please see documentation for more information.') diff --git a/raven/utils/stacks.py b/raven/utils/stacks.py index 7d81c0e..17aa95a 100644 --- a/raven/utils/stacks.py +++ b/raven/utils/stacks.py @@ -162,6 +162,21 @@ def iter_stack_frames(frames=None): yield frame, lineno +def guess_parent_module(stack=None): + """ + Return the first frame's root module that is not part of Raven, or None. + """ + if stack is None: + stack = inspect.stack() + for frame, _, _, _, _, _ in stack: + f_globals = getattr(frame, 'f_globals', {}) + module_name = _getitem_from_frame(f_globals, '__name__') + if not module_name or module_name.startswith('raven'): + continue + return module_name.split('.', 1)[0] + return None + + def get_stack_info(frames): """ Given a list of frames, returns a list of stack information diff --git a/tests/transport/tests.py b/tests/transport/tests.py index 3b0f227..3ce1c9c 100644 --- a/tests/transport/tests.py +++ b/tests/transport/tests.py @@ -84,7 +84,6 @@ class TransportTest(TestCase): 'server_name': u'test_server', 'level': 40, 'checksum': 'acbd18db4cc2f85cedef654fccc4a4d8', - 'modules': {}, 'site': None, 'tags': None, 'time_spent': None, |