77
88import sys
99import datetime
10+ from enum import IntEnum
1011import locale as _locale
1112from itertools import repeat
1213
1617 "timegm" , "month_name" , "month_abbr" , "day_name" , "day_abbr" ,
1718 "Calendar" , "TextCalendar" , "HTMLCalendar" , "LocaleTextCalendar" ,
1819 "LocaleHTMLCalendar" , "weekheader" ,
19- "MONDAY" , "TUESDAY" , "WEDNESDAY" , "THURSDAY" , "FRIDAY" ,
20+ "Weekdays" ,"Months" , "JANUARY" , "FEBRUARY" , "MARCH" ,
21+ "APRIL" , "MAY" , "JUNE" , "JULY" ,
22+ "AUGUST" , "SEPTEMBER" , "OCTOBER" , "NOVEMEMBER" , "DECEMBER" ,
23+ "MONDAY" , "TUESDAY" , "WEDNESDAY" , "THURSDAY" , "FRIDAY" ,
2024 "SATURDAY" , "SUNDAY" ]
2125
2226# Exception raised for bad input (with string parameter for details)
@@ -38,8 +42,36 @@ def __str__(self):
3842
3943
4044# Constants for months referenced later
41- January = 1
42- February = 2
45+ class Months (IntEnum ):
46+ __order__ = "JANUARY FEBRUARY MARCH APRIL MAY JUNE JULY AUGUST SEPTEMBER OCTOBER NOVEMEMBER DECEMBER"
47+ JANUARY = 1
48+ FEBRUARY = 2
49+ MARCH = 3
50+ APRIL = 4
51+ MAY = 5
52+ JUNE = 6
53+ JULY = 7
54+ AUGUST = 8
55+ SEPTEMBER = 9
56+ OCTOBER = 10
57+ NOVEMEMBER = 11
58+ DECEMBER = 12
59+
60+ (JANUARY , FEBRUARY , MARCH , APRIL , MAY , JUNE , JULY , AUGUST , SEPTEMBER , OCTOBER , NOVEMEMBER , DECEMBER ) = [month .value for month in Months ]
61+
62+ # Constants for weekdays
63+ class Weekdays (IntEnum ):
64+ __order__ = "MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY"
65+ MONDAY = 0
66+ TUESDAY = 1
67+ WEDNESDAY = 2
68+ THURSDAY = 3
69+ FRIDAY = 4
70+ SATURDAY = 5
71+ SUNDAY = 6
72+
73+ # Constants for weekdays
74+ (MONDAY , TUESDAY , WEDNESDAY , THURSDAY , FRIDAY , SATURDAY , SUNDAY ) = [week .value for week in Weekdays ]
4375
4476# Number of days per month (except for February in leap years)
4577mdays = [0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 ]
@@ -95,9 +127,6 @@ def __len__(self):
95127month_name = _localized_month ('%B' )
96128month_abbr = _localized_month ('%b' )
97129
98- # Constants for weekdays
99- (MONDAY , TUESDAY , WEDNESDAY , THURSDAY , FRIDAY , SATURDAY , SUNDAY ) = range (7 )
100-
101130
102131def isleap (year ):
103132 """Return True for leap years, False for non-leap years."""
@@ -125,12 +154,12 @@ def monthrange(year, month):
125154 if not 1 <= month <= 12 :
126155 raise IllegalMonthError (month )
127156 day1 = weekday (year , month , 1 )
128- ndays = mdays [month ] + (month == February and isleap (year ))
157+ ndays = mdays [month ] + (month == FEBRUARY and isleap (year ))
129158 return day1 , ndays
130159
131160
132161def _monthlen (year , month ):
133- return mdays [month ] + (month == February and isleap (year ))
162+ return mdays [month ] + (month == FEBRUARY and isleap (year ))
134163
135164
136165def _prevmonth (year , month ):
@@ -262,7 +291,7 @@ def yeardatescalendar(self, year, width=3):
262291 """
263292 months = [
264293 self .monthdatescalendar (year , i )
265- for i in range (January , January + 12 )
294+ for i in range (JANUARY , JANUARY + 12 )
266295 ]
267296 return [months [i :i + width ] for i in range (0 , len (months ), width ) ]
268297
@@ -275,7 +304,7 @@ def yeardays2calendar(self, year, width=3):
275304 """
276305 months = [
277306 self .monthdays2calendar (year , i )
278- for i in range (January , January + 12 )
307+ for i in range (JANUARY , JANUARY + 12 )
279308 ]
280309 return [months [i :i + width ] for i in range (0 , len (months ), width ) ]
281310
@@ -287,7 +316,7 @@ def yeardayscalendar(self, year, width=3):
287316 """
288317 months = [
289318 self .monthdayscalendar (year , i )
290- for i in range (January , January + 12 )
319+ for i in range (JANUARY , JANUARY + 12 )
291320 ]
292321 return [months [i :i + width ] for i in range (0 , len (months ), width ) ]
293322
@@ -509,7 +538,7 @@ def formatyear(self, theyear, width=3):
509538 a ('\n ' )
510539 a ('<tr><th colspan="%d" class="%s">%s</th></tr>' % (
511540 width , self .cssclass_year_head , theyear ))
512- for i in range (January , January + 12 , width ):
541+ for i in range (JANUARY , JANUARY + 12 , width ):
513542 # months in this row
514543 months = range (i , min (i + width , 13 ))
515544 a ('<tr>' )
0 commit comments