summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Cramer <dcramer@gmail.com>2016-08-05 11:35:02 -0700
committerGitHub <noreply@github.com>2016-08-05 11:35:02 -0700
commit79556ecee345d5dde24f6b95ebad7f6d93c726b1 (patch)
tree354a88df6393a4538b10bb9110c50f9c27974ea1
parent1cbb22b48d62885f2a5cd9bec86b7b9e507451f5 (diff)
parentfe75095d6f0c10a1f84ee8ef7ef79f111b6339de (diff)
downloadraven-79556ecee345d5dde24f6b95ebad7f6d93c726b1.tar.gz
Merge pull request #824 from getsentry/django-110-management
Fix behavior of raven command on Django 1.8+
-rw-r--r--raven/contrib/django/management/commands/raven.py50
-rw-r--r--tests/contrib/django/management/__init__.py0
-rw-r--r--tests/contrib/django/management/commands/__init__.py0
-rw-r--r--tests/contrib/django/management/commands/test_raven.py24
4 files changed, 61 insertions, 13 deletions
diff --git a/raven/contrib/django/management/commands/raven.py b/raven/contrib/django/management/commands/raven.py
index 50f044f..c519437 100644
--- a/raven/contrib/django/management/commands/raven.py
+++ b/raven/contrib/django/management/commands/raven.py
@@ -2,7 +2,7 @@
raven.contrib.django.management.commands.raven
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-:copyright: (c) 2010-2013 by the Sentry Team, see AUTHORS for more details
+:copyright: (c) 2010-2016 by the Sentry Team, see AUTHORS for more details
:license: BSD, see LICENSE for more details.
"""
from __future__ import absolute_import, print_function
@@ -10,28 +10,52 @@ from __future__ import absolute_import, print_function
from django.core.management.base import BaseCommand
from optparse import make_option
from raven.scripts.runner import store_json, send_test_message
+
+import argparse
+import django
import sys
import time
+DJANGO_18 = django.VERSION >= (1, 8, 0)
+
+
+class StoreJsonAction(argparse.Action):
+ def __call__(self, parser, namespace, values, option_string=None):
+ setattr(namespace, self.dest, store_json(values[0]))
+
class Command(BaseCommand):
help = 'Commands to interact with the Sentry client'
- option_list = BaseCommand.option_list + (
- make_option(
- "--data", action="callback", callback=store_json,
- type="string", nargs=1, dest="data"),
- make_option(
- "--tags", action="callback", callback=store_json,
- type="string", nargs=1, dest="tags"),
- )
-
- def handle(self, *args, **options):
- if len(args) != 1 or args[0] != 'test':
+ if not DJANGO_18:
+ option_list = BaseCommand.option_list + (
+ make_option(
+ '--data', action='callback', callback=store_json,
+ type='string', nargs=1, dest='data'),
+ make_option(
+ '--tags', action='callback', callback=store_json,
+ type='string', nargs=1, dest='tags'),
+ )
+ else:
+ def add_arguments(self, parser):
+ parser.add_argument(
+ '--data', action=StoreJsonAction,
+ nargs=1, dest='data',
+ )
+ parser.add_argument(
+ '--tags', action=StoreJsonAction,
+ nargs=1, dest='tags',
+ )
+
+ def handle(self, command=None, *args, **options):
+ if command != 'test':
print('Usage: manage.py raven test')
sys.exit(1)
from raven.contrib.django.models import client
- send_test_message(client, options)
+ send_test_message(client, {
+ 'tags': options.get('tags'),
+ 'data': options.get('data'),
+ })
time.sleep(3)
diff --git a/tests/contrib/django/management/__init__.py b/tests/contrib/django/management/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/contrib/django/management/__init__.py
diff --git a/tests/contrib/django/management/commands/__init__.py b/tests/contrib/django/management/commands/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/contrib/django/management/commands/__init__.py
diff --git a/tests/contrib/django/management/commands/test_raven.py b/tests/contrib/django/management/commands/test_raven.py
new file mode 100644
index 0000000..5825c4b
--- /dev/null
+++ b/tests/contrib/django/management/commands/test_raven.py
@@ -0,0 +1,24 @@
+from __future__ import absolute_import
+
+import django
+
+from django.core.management import call_command
+from django.test import TestCase
+from mock import patch
+
+from raven.contrib.django.models import client
+
+DJANGO_18 = django.VERSION >= (1, 8, 0)
+
+
+class RavenCommandTest(TestCase):
+ @patch('raven.contrib.django.management.commands.raven.send_test_message')
+ def test_basic(self, mock_send_test_message):
+ call_command('raven', command='test')
+
+ mock_send_test_message.assert_called_once_with(
+ client, {
+ 'tags': None,
+ 'data': None,
+ }
+ )