summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Cramer <dcramer@gmail.com>2017-02-21 15:24:49 -0800
committerDavid Cramer <dcramer@gmail.com>2017-02-21 15:25:10 -0800
commit4d413e2b583714752bb4e70192d6f56672989417 (patch)
tree503387e10eb8f84ff2916dc0490053ae7aad325f
parent753db03984451e19225c576306479a97272d7b95 (diff)
downloadraven-4d413e2b583714752bb4e70192d6f56672989417.tar.gz
[django] fix registration of hooks
- utilize app.ready() for Django 1.7+ - ensure client is instantiated upon initialization (fixes sys.except_hook) Fixes GH-884
-rw-r--r--examples/django_110/app/management/__init__.py0
-rw-r--r--examples/django_110/app/management/commands/__init__.py0
-rw-r--r--examples/django_110/app/management/commands/example.py8
-rw-r--r--examples/django_110/app/settings.py2
-rw-r--r--raven/contrib/django/__init__.py8
-rw-r--r--raven/contrib/django/apps.py5
-rw-r--r--raven/contrib/django/models.py9
7 files changed, 26 insertions, 6 deletions
diff --git a/examples/django_110/app/management/__init__.py b/examples/django_110/app/management/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/examples/django_110/app/management/__init__.py
diff --git a/examples/django_110/app/management/commands/__init__.py b/examples/django_110/app/management/commands/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/examples/django_110/app/management/commands/__init__.py
diff --git a/examples/django_110/app/management/commands/example.py b/examples/django_110/app/management/commands/example.py
new file mode 100644
index 0000000..a3477dc
--- /dev/null
+++ b/examples/django_110/app/management/commands/example.py
@@ -0,0 +1,8 @@
+from django.core.management.base import BaseCommand
+
+
+class Command(BaseCommand):
+ help = 'Examples'
+
+ def handle(self, *args, **options):
+ raise Exception('oops')
diff --git a/examples/django_110/app/settings.py b/examples/django_110/app/settings.py
index be9c086..1e0155f 100644
--- a/examples/django_110/app/settings.py
+++ b/examples/django_110/app/settings.py
@@ -37,7 +37,7 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
-
+ 'app',
'raven.contrib.django.raven_compat',
]
diff --git a/raven/contrib/django/__init__.py b/raven/contrib/django/__init__.py
index 23036a6..3fb09fa 100644
--- a/raven/contrib/django/__init__.py
+++ b/raven/contrib/django/__init__.py
@@ -7,7 +7,13 @@ raven.contrib.django
"""
from __future__ import absolute_import
-default_app_config = 'raven.contrib.django.apps.RavenConfig'
+import django
+default_app_config = 'raven.contrib.django.apps.RavenConfig'
from .client import DjangoClient # NOQA
+
+# Django 1.8 uses ``raven.contrib.apps.RavenConfig``
+if django.VERSION < (1, 7, 0):
+ from .models import initialize
+ initialize()
diff --git a/raven/contrib/django/apps.py b/raven/contrib/django/apps.py
index 7aaf4ff..db33b38 100644
--- a/raven/contrib/django/apps.py
+++ b/raven/contrib/django/apps.py
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from __future__ import absolute_import
+
from django.apps import AppConfig
@@ -7,3 +8,7 @@ class RavenConfig(AppConfig):
name = 'raven.contrib.django'
label = 'raven_contrib_django'
verbose_name = 'Raven'
+
+ def ready(self):
+ from .models import initialize
+ initialize()
diff --git a/raven/contrib/django/models.py b/raven/contrib/django/models.py
index 05bf3cc..8d60aa0 100644
--- a/raven/contrib/django/models.py
+++ b/raven/contrib/django/models.py
@@ -237,13 +237,14 @@ def install_middleware():
type(middleware)((name,)) + middleware)
-if (
- 'raven.contrib.django' in settings.INSTALLED_APPS or
- 'raven.contrib.django.raven_compat' in settings.INSTALLED_APPS
-):
+def initialize():
register_serializers()
install_middleware()
+ # XXX(dcramer): maybe this setting should disable ALL of this?
if not getattr(settings, 'DISABLE_SENTRY_INSTRUMENTATION', False):
handler = SentryDjangoHandler()
handler.install()
+
+ # instantiate client so hooks get registered
+ get_client() # NOQA