77
88import sys
99import datetime
10+ from enum import IntEnum , global_enum
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+ "Weekday" , "Month" , "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)
@@ -37,10 +41,40 @@ def __str__(self):
3741 return "bad weekday number %r; must be 0 (Monday) to 6 (Sunday)" % self .weekday
3842
3943
44+ # Constants for months referenced later
45+ @global_enum
46+ class Month (IntEnum ):
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+
61+ # Constants for weekdays
62+ @global_enum
63+ class Weekday (IntEnum ):
64+ MONDAY = 0
65+ TUESDAY = 1
66+ WEDNESDAY = 2
67+ THURSDAY = 3
68+ FRIDAY = 4
69+ SATURDAY = 5
70+ SUNDAY = 6
71+
72+
4073# Constants for months referenced later
4174January = 1
4275February = 2
4376
77+
4478# Number of days per month (except for February in leap years)
4579mdays = [0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 ]
4680
@@ -95,9 +129,6 @@ def __len__(self):
95129month_name = _localized_month ('%B' )
96130month_abbr = _localized_month ('%b' )
97131
98- # Constants for weekdays
99- (MONDAY , TUESDAY , WEDNESDAY , THURSDAY , FRIDAY , SATURDAY , SUNDAY ) = range (7 )
100-
101132
102133def isleap (year ):
103134 """Return True for leap years, False for non-leap years."""
@@ -261,8 +292,8 @@ def yeardatescalendar(self, year, width=3):
261292 days. Days are datetime.date objects.
262293 """
263294 months = [
264- self .monthdatescalendar (year , i )
265- for i in range ( January , January + 12 )
295+ self .monthdatescalendar (year , m )
296+ for m in Month
266297 ]
267298 return [months [i :i + width ] for i in range (0 , len (months ), width ) ]
268299
@@ -274,8 +305,8 @@ def yeardays2calendar(self, year, width=3):
274305 zero.
275306 """
276307 months = [
277- self .monthdays2calendar (year , i )
278- for i in range ( January , January + 12 )
308+ self .monthdays2calendar (year , m )
309+ for m in Month
279310 ]
280311 return [months [i :i + width ] for i in range (0 , len (months ), width ) ]
281312
@@ -286,8 +317,8 @@ def yeardayscalendar(self, year, width=3):
286317 Day numbers outside this month are zero.
287318 """
288319 months = [
289- self .monthdayscalendar (year , i )
290- for i in range ( January , January + 12 )
320+ self .monthdayscalendar (year , m )
321+ for m in Month
291322 ]
292323 return [months [i :i + width ] for i in range (0 , len (months ), width ) ]
293324
0 commit comments