]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-35078: Allow customization of CSS class name of a month in calendar module (gh...
authorSrinivas Reddy Thatiparthy (శ్రీనివాస్ రెడ్డి తాటిపర్తి) <thatiparthysreenivas@gmail.com>
Tue, 2 Jun 2020 11:33:09 +0000 (17:03 +0530)
committerGitHub <noreply@github.com>
Tue, 2 Jun 2020 11:33:09 +0000 (13:33 +0200)
Refactor formatweekday(), formatmonthname() methods in LocaleHTMLCalendar and LocaleTextCalendar classes in calendar module to call the base class methods. This enables customizable CSS classes for LocaleHTMLCalendar and LocaleTextCalendar.

Patch by Srinivas Reddy Thatiparthy

Lib/calendar.py
Lib/test/test_calendar.py
Misc/NEWS.d/next/Library/2018-10-27-09-37-03.bpo-35078.kweA3R.rst [new file with mode: 0644]

index 7550d52c0a94a5eb237358401256d8a794857fdb..7311a0173729ecc9c858dd43f39dc14e5c2865c8 100644 (file)
@@ -571,19 +571,11 @@ class LocaleTextCalendar(TextCalendar):
 
     def formatweekday(self, day, width):
         with different_locale(self.locale):
-            if width >= 9:
-                names = day_name
-            else:
-                names = day_abbr
-            name = names[day]
-            return name[:width].center(width)
+            return super().formatweekday(day, width)
 
     def formatmonthname(self, theyear, themonth, width, withyear=True):
         with different_locale(self.locale):
-            s = month_name[themonth]
-            if withyear:
-                s = "%s %r" % (s, theyear)
-            return s.center(width)
+            return super().formatmonthname(theyear, themonth, width, withyear)
 
 
 class LocaleHTMLCalendar(HTMLCalendar):
@@ -601,16 +593,11 @@ class LocaleHTMLCalendar(HTMLCalendar):
 
     def formatweekday(self, day):
         with different_locale(self.locale):
-            s = day_abbr[day]
-            return '<th class="%s">%s</th>' % (self.cssclasses[day], s)
+            return super().formatweekday(day)
 
     def formatmonthname(self, theyear, themonth, withyear=True):
         with different_locale(self.locale):
-            s = month_name[themonth]
-            if withyear:
-                s = '%s %s' % (s, theyear)
-            return '<tr><th colspan="7" class="month">%s</th></tr>' % s
-
+            return super().formatmonthname(theyear, themonth, withyear)
 
 # Support for old module level interface
 c = TextCalendar()
index 6241d114d33823784790c4bf1db10c81aa75050c..7c7ec1c931aa4801728d998eec7436584288975e 100644 (file)
@@ -564,6 +564,30 @@ class CalendarTestCase(unittest.TestCase):
         new_october = calendar.TextCalendar().formatmonthname(2010, 10, 10)
         self.assertEqual(old_october, new_october)
 
+    def test_locale_html_calendar_custom_css_class_month_name(self):
+        try:
+            cal = calendar.LocaleHTMLCalendar(locale='')
+            local_month = cal.formatmonthname(2010, 10, 10)
+        except locale.Error:
+            # cannot set the system default locale -- skip rest of test
+            raise unittest.SkipTest('cannot set the system default locale')
+        self.assertIn('class="month"', local_month)
+        cal.cssclass_month_head = "text-center month"
+        local_month = cal.formatmonthname(2010, 10, 10)
+        self.assertIn('class="text-center month"', local_month)
+
+    def test_locale_html_calendar_custom_css_class_weekday(self):
+        try:
+            cal = calendar.LocaleHTMLCalendar(locale='')
+            local_weekday = cal.formatweekday(6)
+        except locale.Error:
+            # cannot set the system default locale -- skip rest of test
+            raise unittest.SkipTest('cannot set the system default locale')
+        self.assertIn('class="sun"', local_weekday)
+        cal.cssclasses_weekday_head = ["mon2", "tue2", "wed2", "thu2", "fri2", "sat2", "sun2"]
+        local_weekday = cal.formatweekday(6)
+        self.assertIn('class="sun2"', local_weekday)
+
     def test_itermonthdays3(self):
         # ensure itermonthdays3 doesn't overflow after datetime.MAXYEAR
         list(calendar.Calendar().itermonthdays3(datetime.MAXYEAR, 12))
diff --git a/Misc/NEWS.d/next/Library/2018-10-27-09-37-03.bpo-35078.kweA3R.rst b/Misc/NEWS.d/next/Library/2018-10-27-09-37-03.bpo-35078.kweA3R.rst
new file mode 100644 (file)
index 0000000..123f9da
--- /dev/null
@@ -0,0 +1,3 @@
+Refactor formatweekday, formatmonthname methods in LocaleHTMLCalendar and LocaleTextCalendar classes in calendar module to call the base class methods.This enables customizable CSS classes for LocaleHTMLCalendar.
+Patch by Srinivas Reddy Thatiparthy
+