diff options
author | David Cramer <dcramer@gmail.com> | 2016-08-05 11:04:32 -0700 |
---|---|---|
committer | David Cramer <dcramer@gmail.com> | 2016-08-05 11:04:32 -0700 |
commit | 5ed5f94f1ef5c038ded848376ba1e4366ed0ed3c (patch) | |
tree | 05f46a3b5f6a5eb77f7b9c9478e41746186628f1 | |
parent | 1cbb22b48d62885f2a5cd9bec86b7b9e507451f5 (diff) | |
download | raven-django-110-management.tar.gz |
Fix behavior of raven command on Django 1.8+django-110-management
4 files changed, 53 insertions, 10 deletions
diff --git a/raven/contrib/django/management/commands/raven.py b/raven/contrib/django/management/commands/raven.py index 50f044f..33c48bc 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,21 +10,42 @@ 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"), - ) + 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, *args, **options): if len(args) != 1 or args[0] != 'test': @@ -33,5 +54,8 @@ class Command(BaseCommand): 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..5442437 --- /dev/null +++ b/tests/contrib/django/management/commands/test_raven.py @@ -0,0 +1,19 @@ +from __future__ import absolute_import + +from django.core.management import call_command +from django.test import TestCase +from mock import patch + +from raven.contrib.django.models import client + + +class RavenCommandTest(TestCase): + @patch('raven.contrib.django.management.commands.raven.send_test_message') + def test_basic(self, mock_send_test_message): + call_command('raven', args=['test']) + mock_send_test_message.assert_called_once_with( + client, { + 'tags': None, + 'data': None, + } + ) |