From 8d510cd6e117b4ec827e4a26947ea76971a55763 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 31 Jan 2013 15:57:51 +0200 Subject: [PATCH] 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). --- Lib/calendar.py | 1 + Lib/test/test_calendar.py | 18 +++++++++++++++--- Misc/NEWS | 4 ++++ 3 files changed, 20 insertions(+), 3 deletions(-) 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. -- 2.50.1