Kaydet (Commit) e92b3b72 authored tarafından Ramiro Morales's avatar Ramiro Morales

Fixed #11118 -- Made management command BaseCommand restore locale after execution.

Thanks rvdrijst for the report and initial patch and Claude Paroz for enhancing it.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@17077 bcc190cf-cafb-0310-a4f2-bffc1f526a37
üst 90d36974
...@@ -203,9 +203,11 @@ class BaseCommand(object): ...@@ -203,9 +203,11 @@ class BaseCommand(object):
# like permissions, and those shouldn't contain any translations. # like permissions, and those shouldn't contain any translations.
# But only do this if we can assume we have a working settings file, # But only do this if we can assume we have a working settings file,
# because django.utils.translation requires settings. # because django.utils.translation requires settings.
saved_lang = None
if self.can_import_settings: if self.can_import_settings:
try: try:
from django.utils import translation from django.utils import translation
saved_lang = translation.get_language()
translation.activate('en-us') translation.activate('en-us')
except ImportError, e: except ImportError, e:
# If settings should be available, but aren't, # If settings should be available, but aren't,
...@@ -232,6 +234,8 @@ class BaseCommand(object): ...@@ -232,6 +234,8 @@ class BaseCommand(object):
except CommandError, e: except CommandError, e:
self.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % e))) self.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % e)))
sys.exit(1) sys.exit(1)
if saved_lang is not None:
translation.activate(saved_lang)
def validate(self, app=None, display_num_errors=False): def validate(self, app=None, display_num_errors=False):
""" """
......
...@@ -3,6 +3,7 @@ from StringIO import StringIO ...@@ -3,6 +3,7 @@ from StringIO import StringIO
from django.core import management from django.core import management
from django.core.management.base import CommandError from django.core.management.base import CommandError
from django.test import TestCase from django.test import TestCase
from django.utils import translation
class CommandTests(TestCase): class CommandTests(TestCase):
...@@ -18,5 +19,11 @@ class CommandTests(TestCase): ...@@ -18,5 +19,11 @@ class CommandTests(TestCase):
self.assertEqual(out.getvalue(), self.assertEqual(out.getvalue(),
"I don't feel like dancing Jive.") "I don't feel like dancing Jive.")
def test_language_preserved(self):
out = StringIO()
with translation.override('fr'):
management.call_command('dance', stdout=out)
self.assertEqual(translation.get_language(), 'fr')
def test_explode(self): def test_explode(self):
self.assertRaises(CommandError, management.call_command, ('explode',)) self.assertRaises(CommandError, management.call_command, ('explode',))
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment