From 132d0e516e5881cb3f6445e9d84e01c9f2123254 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Mon, 18 Aug 2014 19:57:50 +0200 Subject: [PATCH] Fixed #22171 -- Improved sanitize_separators cleverness Thanks Klaas van Schelven for the report and Tim Graham for the review. --- django/utils/formats.py | 10 +++++++--- tests/i18n/tests.py | 6 ++++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/django/utils/formats.py b/django/utils/formats.py index 521ab5c763..3441f0f420 100644 --- a/django/utils/formats.py +++ b/django/utils/formats.py @@ -221,9 +221,13 @@ def sanitize_separators(value): parts.append(decimals) if settings.USE_THOUSAND_SEPARATOR: thousand_sep = get_format('THOUSAND_SEPARATOR') - for replacement in set([ - thousand_sep, unicodedata.normalize('NFKD', thousand_sep)]): - value = value.replace(replacement, '') + if thousand_sep == '.' and value.count('.') == 1 and len(value.split('.')[-1]) != 3: + # Special case where we suspect a dot meant decimal separator (see #22171) + pass + else: + for replacement in set([ + thousand_sep, unicodedata.normalize('NFKD', thousand_sep)]): + value = value.replace(replacement, '') parts.append(value) value = '.'.join(reversed(parts)) return value diff --git a/tests/i18n/tests.py b/tests/i18n/tests.py index 986b4bfa1e..0599b0b006 100644 --- a/tests/i18n/tests.py +++ b/tests/i18n/tests.py @@ -734,6 +734,12 @@ class FormattingTests(TestCase): with self.settings(USE_THOUSAND_SEPARATOR=True, USE_L10N=False): self.assertEqual(sanitize_separators('12\xa0345'), '12\xa0345') + with patch_formats(get_language(), THOUSAND_SEPARATOR='.', DECIMAL_SEPARATOR=','): + with self.settings(USE_THOUSAND_SEPARATOR=True): + self.assertEqual(sanitize_separators('10.234'), '10234') + # Suspicion that user entered dot as decimal separator (#22171) + self.assertEqual(sanitize_separators('10.10'), '10.10') + def test_iter_format_modules(self): """ Tests the iter_format_modules function.