summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conftest.py6
-rw-r--r--raven/contrib/flask.py9
-rw-r--r--tests/contrib/flask/tests.py18
-rw-r--r--tox.ini2
4 files changed, 24 insertions, 11 deletions
diff --git a/conftest.py b/conftest.py
index f333890..09317ed 100644
--- a/conftest.py
+++ b/conftest.py
@@ -4,10 +4,8 @@ import sys
collect_ignore = []
-if sys.version_info[0] > 2:
- collect_ignore.append("tests/contrib/flask")
- if sys.version_info[1] == 2:
- collect_ignore.append("tests/handlers/logbook")
+if sys.version_info[0] > 2 and sys.version_info[1] == 2:
+ collect_ignore.append("tests/handlers/logbook")
try:
import gevent
diff --git a/raven/contrib/flask.py b/raven/contrib/flask.py
index dc5c268..d0f1300 100644
--- a/raven/contrib/flask.py
+++ b/raven/contrib/flask.py
@@ -94,7 +94,7 @@ class Sentry(object):
# TODO(dcramer): the client isn't using local context and therefore
# gets shared by every app that does init on it
def __init__(self, app=None, client=None, client_cls=Client, dsn=None,
- logging=False, level=logging.NOTSET, wrap_wsgi=True,
+ logging=False, level=logging.NOTSET, wrap_wsgi=None,
register_signal=True):
self.dsn = dsn
self.logging = logging
@@ -205,6 +205,13 @@ class Sentry(object):
if wrap_wsgi is not None:
self.wrap_wsgi = wrap_wsgi
+ else:
+ # Fix https://github.com/getsentry/raven-python/issues/412
+ # the gist is that we get errors twice in debug mode if we don't do this
+ if app and app.debug:
+ self.wrap_wsgi = False
+ else:
+ self.wrap_wsgi = True
if register_signal is not None:
self.register_signal = register_signal
diff --git a/tests/contrib/flask/tests.py b/tests/contrib/flask/tests.py
index ea9183c..d1df979 100644
--- a/tests/contrib/flask/tests.py
+++ b/tests/contrib/flask/tests.py
@@ -29,11 +29,12 @@ class User(AnonymousUserMixin):
get_id = lambda x: 1
-def create_app(ignore_exceptions=None):
+def create_app(ignore_exceptions=None, debug=False):
import os
app = Flask(__name__)
app.config['SECRET_KEY'] = os.urandom(40)
+ app.debug = debug
if ignore_exceptions:
app.config['RAVEN_IGNORE_EXCEPTIONS'] = ignore_exceptions
@@ -91,7 +92,7 @@ class BaseTest(TestCase):
app = create_app(*args, **kwargs)
raven = TempStoreClient()
Sentry(app, client=raven)
- return app.test_client(), raven
+ return app.test_client(), raven, app
class FlaskTest(BaseTest):
@@ -203,22 +204,29 @@ class FlaskTest(BaseTest):
http = event['request']
self.assertEqual({}, http.get('data'))
+ def test_wrap_wsgi_status(self):
+ _, _, app_debug = self.make_client_and_raven(debug=True)
+ self.assertFalse(app_debug.extensions['sentry'].wrap_wsgi)
+
+ _, _, app_ndebug = self.make_client_and_raven(debug=False)
+ self.assertTrue(app_ndebug.extensions['sentry'].wrap_wsgi)
+
def test_error_handler_with_ignored_exception(self):
- client, raven = self.make_client_and_raven(ignore_exceptions=[NameError, ValueError])
+ client, raven, _ = self.make_client_and_raven(ignore_exceptions=[NameError, ValueError])
response = client.get('/an-error/')
self.assertEquals(response.status_code, 500)
self.assertEquals(len(raven.events), 0)
def test_error_handler_with_exception_not_ignored(self):
- client, raven = self.make_client_and_raven(ignore_exceptions=[NameError, KeyError])
+ client, raven, _ = self.make_client_and_raven(ignore_exceptions=[NameError, KeyError])
response = client.get('/an-error/')
self.assertEquals(response.status_code, 500)
self.assertEquals(len(raven.events), 1)
def test_error_handler_with_empty_ignore_exceptions_list(self):
- client, raven = self.make_client_and_raven(ignore_exceptions=[])
+ client, raven, _ = self.make_client_and_raven(ignore_exceptions=[])
response = client.get('/an-error/')
self.assertEquals(response.status_code, 500)
diff --git a/tox.ini b/tox.ini
index f0fa067..41d42e0 100644
--- a/tox.ini
+++ b/tox.ini
@@ -4,7 +4,7 @@
# and then run "tox" from this directory.
[tox]
-envlist = py26, py27, py30, py31, py32, py33, pypy
+envlist = py26, py27, py30, py31, py32, py33, py34, pypy
[testenv]
commands =