Skip to content

Commit edef5f6

Browse files
authored
Merge pull request getsentry#1028 from arnavk/arnav/logging_signal
Fire signal after setup_logging is called for Flask usage
2 parents d776ad8 + 7518c95 commit edef5f6

File tree

2 files changed

+31
-5
lines changed

2 files changed

+31
-5
lines changed

Diff for: raven/contrib/flask.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import logging
1919

20+
import blinker
2021
from flask import request, current_app, g
2122
from flask.signals import got_request_exception, request_finished
2223
from werkzeug.exceptions import ClientDisconnected
@@ -31,6 +32,10 @@
3132
from raven.utils.conf import convert_options
3233

3334

35+
raven_signals = blinker.Namespace()
36+
logging_configured = raven_signals.signal('logging_configured')
37+
38+
3439
def make_client(client_cls, app, dsn=None):
3540
return client_cls(
3641
**convert_options(
@@ -270,7 +275,11 @@ def init_app(self, app, dsn=None, logging=None, level=None,
270275
if self.logging_exclusions is not None:
271276
kwargs['exclude'] = self.logging_exclusions
272277

273-
setup_logging(SentryHandler(self.client, level=self.level), **kwargs)
278+
handler = SentryHandler(self.client, level=self.level)
279+
setup_logging(handler, **kwargs)
280+
281+
logging_configured.send(
282+
self, sentry_handler=SentryHandler, **kwargs)
274283

275284
if self.wrap_wsgi:
276285
app.wsgi_app = SentryMiddleware(app.wsgi_app, self.client)

Diff for: tests/contrib/flask/tests.py

+21-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
import logging
22

33
from exam import before, fixture
4-
from mock import patch
5-
64
from flask import Flask, current_app, g
75
from flask.ext.login import LoginManager, AnonymousUserMixin, login_user
6+
from mock import patch, Mock
87

9-
from raven.contrib.flask import Sentry
10-
from raven.utils.testutils import InMemoryClient, TestCase
8+
from raven.contrib.flask import Sentry, logging_configured
119
from raven.handlers.logging import SentryHandler
10+
from raven.utils.testutils import InMemoryClient, TestCase
1211

1312

1413
class User(AnonymousUserMixin):
@@ -248,6 +247,24 @@ def test_logging_setup_with_exclusion_list(self):
248247
some_other_logger = logging.getLogger("some_other_logger")
249248
self.assertTrue(some_other_logger.propagate)
250249

250+
def test_logging_setup_singal(self):
251+
app = Flask(__name__)
252+
253+
mock_handler = Mock()
254+
255+
def receiver(sender, *args, **kwargs):
256+
self.assertIn("exclude", kwargs)
257+
mock_handler(*args, **kwargs)
258+
259+
logging_configured.connect(receiver)
260+
raven = InMemoryClient()
261+
262+
Sentry(
263+
app, client=raven, logging=True,
264+
logging_exclusions=("excluded_logger",))
265+
266+
mock_handler.assert_called()
267+
251268
def test_check_client_type(self):
252269
self.assertRaises(TypeError, lambda _: Sentry(self.app, "oops, I'm putting my DSN instead"))
253270

0 commit comments

Comments
 (0)