diff options
author | David Cramer <dcramer@gmail.com> | 2016-08-05 11:35:02 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-05 11:35:02 -0700 |
commit | 79556ecee345d5dde24f6b95ebad7f6d93c726b1 (patch) | |
tree | 354a88df6393a4538b10bb9110c50f9c27974ea1 | |
parent | 1cbb22b48d62885f2a5cd9bec86b7b9e507451f5 (diff) | |
parent | fe75095d6f0c10a1f84ee8ef7ef79f111b6339de (diff) | |
download | raven-79556ecee345d5dde24f6b95ebad7f6d93c726b1.tar.gz |
Merge pull request #824 from getsentry/django-110-management
Fix behavior of raven command on Django 1.8+
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, + } + ) |