summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Cramer <dcramer@gmail.com>2017-06-28 09:16:41 -0700
committerGitHub <noreply@github.com>2017-06-28 09:16:41 -0700
commitedef5f6759e6c91ea972c83be28ffb6def8195d2 (patch)
treedd79a3920c7be6d6237180c5696a5a7283995efa
parentd776ad86303a4e982095dbbd06380be243b4598b (diff)
parent7518c95ab90657bb3f71786604f97464140d3018 (diff)
downloadraven-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.py11
-rw-r--r--tests/contrib/flask/tests.py25
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"))