diff options
author | David Cramer <dcramer@gmail.com> | 2017-06-28 09:16:41 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-28 09:16:41 -0700 |
commit | edef5f6759e6c91ea972c83be28ffb6def8195d2 (patch) | |
tree | dd79a3920c7be6d6237180c5696a5a7283995efa | |
parent | d776ad86303a4e982095dbbd06380be243b4598b (diff) | |
parent | 7518c95ab90657bb3f71786604f97464140d3018 (diff) | |
download | raven-edef5f6759e6c91ea972c83be28ffb6def8195d2.tar.gz |
Merge pull request #1028 from arnavk/arnav/logging_signal
Fire signal after setup_logging is called for Flask usage
-rw-r--r-- | raven/contrib/flask.py | 11 | ||||
-rw-r--r-- | tests/contrib/flask/tests.py | 25 |
2 files changed, 31 insertions, 5 deletions
diff --git a/raven/contrib/flask.py b/raven/contrib/flask.py index b8ac494..30a4880 100644 --- a/raven/contrib/flask.py +++ b/raven/contrib/flask.py @@ -17,6 +17,7 @@ else: import logging +import blinker from flask import request, current_app, g from flask.signals import got_request_exception, request_finished from werkzeug.exceptions import ClientDisconnected @@ -31,6 +32,10 @@ from raven.utils.wsgi import get_headers, get_environ from raven.utils.conf import convert_options +raven_signals = blinker.Namespace() +logging_configured = raven_signals.signal('logging_configured') + + def make_client(client_cls, app, dsn=None): return client_cls( **convert_options( @@ -270,7 +275,11 @@ class Sentry(object): if self.logging_exclusions is not None: kwargs['exclude'] = self.logging_exclusions - setup_logging(SentryHandler(self.client, level=self.level), **kwargs) + handler = SentryHandler(self.client, level=self.level) + setup_logging(handler, **kwargs) + + logging_configured.send( + self, sentry_handler=SentryHandler, **kwargs) if self.wrap_wsgi: app.wsgi_app = SentryMiddleware(app.wsgi_app, self.client) diff --git a/tests/contrib/flask/tests.py b/tests/contrib/flask/tests.py index 4fffc53..2804f00 100644 --- a/tests/contrib/flask/tests.py +++ b/tests/contrib/flask/tests.py @@ -1,14 +1,13 @@ import logging from exam import before, fixture -from mock import patch - from flask import Flask, current_app, g from flask.ext.login import LoginManager, AnonymousUserMixin, login_user +from mock import patch, Mock -from raven.contrib.flask import Sentry -from raven.utils.testutils import InMemoryClient, TestCase +from raven.contrib.flask import Sentry, logging_configured from raven.handlers.logging import SentryHandler +from raven.utils.testutils import InMemoryClient, TestCase class User(AnonymousUserMixin): @@ -248,6 +247,24 @@ class FlaskTest(BaseTest): some_other_logger = logging.getLogger("some_other_logger") self.assertTrue(some_other_logger.propagate) + def test_logging_setup_singal(self): + app = Flask(__name__) + + mock_handler = Mock() + + def receiver(sender, *args, **kwargs): + self.assertIn("exclude", kwargs) + mock_handler(*args, **kwargs) + + logging_configured.connect(receiver) + raven = InMemoryClient() + + Sentry( + app, client=raven, logging=True, + logging_exclusions=("excluded_logger",)) + + mock_handler.assert_called() + def test_check_client_type(self): self.assertRaises(TypeError, lambda _: Sentry(self.app, "oops, I'm putting my DSN instead")) |