From 5f2f0113db4489de4b2260bf3365b514418ad0b8 Mon Sep 17 00:00:00 2001 From: Ramiro Morales Date: Thu, 3 Feb 2011 15:54:27 +0000 Subject: [PATCH] [1.2.X] Fixed #15129 -- Fixed stability of data input/output L10N format modules priority order. Thanks tonnzor for the report and fix. Backport of [15402] from trunk git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@15403 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/utils/formats.py | 4 ++-- tests/regressiontests/i18n/tests.py | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/django/utils/formats.py b/django/utils/formats.py index d0c63fb96f..a73b596dbe 100644 --- a/django/utils/formats.py +++ b/django/utils/formats.py @@ -36,12 +36,12 @@ def iter_format_modules(lang): def get_format_modules(reverse=False): """ - Returns an iterator over the format modules found + Returns a list of the format modules found """ lang = get_language() modules = _format_modules_cache.setdefault(lang, list(iter_format_modules(lang))) if reverse: - modules.reverse() + return list(reversed(modules)) return modules def get_format(format_type): diff --git a/tests/regressiontests/i18n/tests.py b/tests/regressiontests/i18n/tests.py index e9c4566227..e7f78814b0 100644 --- a/tests/regressiontests/i18n/tests.py +++ b/tests/regressiontests/i18n/tests.py @@ -8,7 +8,8 @@ import pickle from django.conf import settings from django.template import Template, Context from django.test import TestCase -from django.utils.formats import get_format, date_format, time_format, localize, localize_input, iter_format_modules +from django.utils.formats import (get_format, date_format, time_format, + localize, localize_input, iter_format_modules, get_format_modules) from django.utils.numberformat import format as nformat from django.utils.safestring import mark_safe, SafeString, SafeUnicode from django.utils.translation import (ugettext, ugettext_lazy, activate, @@ -466,6 +467,19 @@ class FormattingTests(TestCase): finally: settings.USE_L10N = old_l10n + def test_get_format_modules_stability(self): + activate('de') + old_format_module_path = settings.FORMAT_MODULE_PATH + settings.FORMAT_MODULE_PATH = 'regressiontests.i18n.other.locale' + try: + settings.USE_L10N = True + old = "%r" % get_format_modules(reverse=True) + new = "%r" % get_format_modules(reverse=True) # second try + self.assertEqual(new, old, 'Value returned by get_formats_modules() must be preserved between calls.') + finally: + settings.FORMAT_MODULE_PATH = old_format_module_path + deactivate() + class MiscTests(TestCase):