diff options
author | David Cramer <dcramer@gmail.com> | 2017-02-15 13:37:01 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-02-15 13:37:01 -0800 |
commit | 88584005cf8954439accf818964476d977d7a58f (patch) | |
tree | 438be62c6d8ac53ededde9d2bda30b80f59e6ae6 | |
parent | 632c343470a668ef08dd943e5b22489b469444f5 (diff) | |
parent | cce5c2d2e6a3299808ea0832b9582e71a28d3c67 (diff) | |
download | raven-88584005cf8954439accf818964476d977d7a58f.tar.gz |
Merge pull request #905 from getsentry/feature/repos
Add repos configuration
-rw-r--r-- | docs/advanced.rst | 19 | ||||
-rw-r--r-- | raven/base.py | 13 | ||||
-rw-r--r-- | raven/utils/conf.py | 1 | ||||
-rw-r--r-- | tests/base/tests.py | 18 |
4 files changed, 51 insertions, 0 deletions
diff --git a/docs/advanced.rst b/docs/advanced.rst index 535e42a..4d94a6f 100644 --- a/docs/advanced.rst +++ b/docs/advanced.rst @@ -117,6 +117,25 @@ The following are valid arguments which may be passed to the Raven client: tags = {'site': 'foo.com'} +.. describe:: repos + + This describes local repositories that are reflected in your source code:: + + repos = { + 'raven': { + # the name of the repository as registered in Sentry + 'name': 'getsentry/raven-python', + # the prefix where the local source code is found in the repo + 'prefix': 'src', + } + } + + The repository key can either be a module name or the absolute path. When + a module name is given it will be automatically converted to its absolute path. + + For more information, see the :doc:`repos interface <../../../interfaces/repos>` + docs. + .. describe:: exclude_paths Extending this allow you to ignore module prefixes when we attempt to diff --git a/raven/base.py b/raven/base.py index fb2dfa8..6fadbce 100644 --- a/raven/base.py +++ b/raven/base.py @@ -190,6 +190,7 @@ class Client(object): 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.transaction = TransactionStack() self.ignore_exceptions = set(o.get('ignore_exceptions') or ()) @@ -220,6 +221,17 @@ class Client(object): self.hook_libraries(hook_libraries) + def _format_repos(self, value): + if not value: + return {} + result = {} + for path, config in iteritems(value): + if path[0] != '/': + # assume its a module + path = os.path.abspath(__import__(path).__file__) + result[path] = config + return result + def set_dsn(self, dsn=None, transport=None): if not dsn and os.environ.get('SENTRY_DSN'): msg = "Configuring Raven from environment variable 'SENTRY_DSN'" @@ -468,6 +480,7 @@ class Client(object): data.setdefault('event_id', event_id) data.setdefault('platform', PLATFORM_NAME) data.setdefault('sdk', SDK_VALUE) + data.setdefault('repos', self.repos) # insert breadcrumbs if self.enable_breadcrumbs: diff --git a/raven/utils/conf.py b/raven/utils/conf.py index 7a9bc42..906e158 100644 --- a/raven/utils/conf.py +++ b/raven/utils/conf.py @@ -50,6 +50,7 @@ def convert_options(settings, defaults=None): options.setdefault('context', getopt('context')) options.setdefault('tags', getopt('tags')) options.setdefault('release', getopt('release')) + options.setdefault('repos', getopt('repos')) options.setdefault('environment', getopt('environment')) options.setdefault('ignore_exceptions', getopt('ignore_exceptions')) diff --git a/tests/base/tests.py b/tests/base/tests.py index 9660346..040f3bd 100644 --- a/tests/base/tests.py +++ b/tests/base/tests.py @@ -585,3 +585,21 @@ class ClientTest(TestCase): Client() finally: sys.argv = argv + + def test_repos_configuration(self): + client = Client(repos={ + '/foo/bar': { + 'name': 'repo', + }, + 'raven': { + 'name': 'getsentry/raven-python', + }, + }) + assert client.repos == { + '/foo/bar': { + 'name': 'repo', + }, + os.path.abspath(raven.__file__): { + 'name': 'getsentry/raven-python', + }, + } |