summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Cramer <dcramer@gmail.com>2012-12-29 21:10:40 -0800
committerDavid Cramer <dcramer@gmail.com>2012-12-29 21:10:40 -0800
commit0fb5a9c108be5145cf7efb86e9cb5561d5c7a454 (patch)
tree6578a97fdd1e6facea708fe1318695f506fa058e
parente2393f84cbecf6095df407bc8ac70739358e8a5e (diff)
downloadraven-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.py8
-rw-r--r--raven/utils/stacks.py15
-rw-r--r--tests/transport/tests.py1
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,