From: Serhiy Storchaka <storchaka@gmail.com>
Date: Thu, 31 Jan 2013 13:57:51 +0000 (+0200)
Subject: Issue #17049: Localized calendar methods now return unicode if a locale
X-Git-Tag: v2.7.4rc1~164^2~17
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8d510cd6e117b4ec827e4a26947ea76971a55763;p=python

Issue #17049: Localized calendar methods now return unicode if a locale
includes an encoding and the result string contains month or weekday (was
regression from Python 2.6).
---

diff --git a/Lib/calendar.py b/Lib/calendar.py
index 232957829f..441b2f576b 100644
--- a/Lib/calendar.py
+++ b/Lib/calendar.py
@@ -492,6 +492,7 @@ class TimeEncoding:
     def __enter__(self):
         self.oldlocale = _locale.getlocale(_locale.LC_TIME)
         _locale.setlocale(_locale.LC_TIME, self.locale)
+        return _locale.getlocale(_locale.LC_TIME)[1]
 
     def __exit__(self, *args):
         _locale.setlocale(_locale.LC_TIME, self.oldlocale)
diff --git a/Lib/test/test_calendar.py b/Lib/test/test_calendar.py
index 0f91d29590..40fb76ddd6 100644
--- a/Lib/test/test_calendar.py
+++ b/Lib/test/test_calendar.py
@@ -255,11 +255,23 @@ class CalendarTestCase(unittest.TestCase):
         # (it is still not thread-safe though)
         old_october = calendar.TextCalendar().formatmonthname(2010, 10, 10)
         try:
-            calendar.LocaleTextCalendar(locale='').formatmonthname(2010, 10, 10)
+            cal = calendar.LocaleTextCalendar(locale='')
+            local_weekday = cal.formatweekday(1, 10)
+            local_month = cal.formatmonthname(2010, 10, 10)
         except locale.Error:
             # cannot set the system default locale -- skip rest of test
-            return
-        calendar.LocaleHTMLCalendar(locale='').formatmonthname(2010, 10)
+            raise unittest.SkipTest('cannot set the system default locale')
+        # should be encodable
+        local_weekday.encode('utf-8')
+        local_month.encode('utf-8')
+        self.assertEqual(len(local_weekday), 10)
+        self.assertGreaterEqual(len(local_month), 10)
+        cal = calendar.LocaleHTMLCalendar(locale='')
+        local_weekday = cal.formatweekday(1)
+        local_month = cal.formatmonthname(2010, 10)
+        # should be encodable
+        local_weekday.encode('utf-8')
+        local_month.encode('utf-8')
         new_october = calendar.TextCalendar().formatmonthname(2010, 10, 10)
         self.assertEqual(old_october, new_october)
 
diff --git a/Misc/NEWS b/Misc/NEWS
index 34e4bda9c2..e4d429fa91 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -202,6 +202,10 @@ Core and Builtins
 Library
 -------
 
+- Issue #17049: Localized calendar methods now return unicode if a locale
+  includes an encoding and the result string contains month or weekday (was
+  regression from Python 2.6).
+
 - Issue #4844: ZipFile now raises BadZipfile when opens a ZIP file with an
   incomplete "End of Central Directory" record.  Original patch by Guilherme
   Polo and Alan McIntyre.