7
7
8
8
import sys
9
9
import datetime
10
+ from enum import IntEnum
10
11
import locale as _locale
11
12
from itertools import repeat
12
13
16
17
"timegm" , "month_name" , "month_abbr" , "day_name" , "day_abbr" ,
17
18
"Calendar" , "TextCalendar" , "HTMLCalendar" , "LocaleTextCalendar" ,
18
19
"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" ,
20
24
"SATURDAY" , "SUNDAY" ]
21
25
22
26
# Exception raised for bad input (with string parameter for details)
@@ -38,8 +42,36 @@ def __str__(self):
38
42
39
43
40
44
# 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 ]
43
75
44
76
# Number of days per month (except for February in leap years)
45
77
mdays = [0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 ]
@@ -95,9 +127,6 @@ def __len__(self):
95
127
month_name = _localized_month ('%B' )
96
128
month_abbr = _localized_month ('%b' )
97
129
98
- # Constants for weekdays
99
- (MONDAY , TUESDAY , WEDNESDAY , THURSDAY , FRIDAY , SATURDAY , SUNDAY ) = range (7 )
100
-
101
130
102
131
def isleap (year ):
103
132
"""Return True for leap years, False for non-leap years."""
@@ -125,12 +154,12 @@ def monthrange(year, month):
125
154
if not 1 <= month <= 12 :
126
155
raise IllegalMonthError (month )
127
156
day1 = weekday (year , month , 1 )
128
- ndays = mdays [month ] + (month == February and isleap (year ))
157
+ ndays = mdays [month ] + (month == Months . FEBRUARY and isleap (year ))
129
158
return day1 , ndays
130
159
131
160
132
161
def _monthlen (year , month ):
133
- return mdays [month ] + (month == February and isleap (year ))
162
+ return mdays [month ] + (month == Months . FEBRUARY and isleap (year ))
134
163
135
164
136
165
def _prevmonth (year , month ):
@@ -262,7 +291,7 @@ def yeardatescalendar(self, year, width=3):
262
291
"""
263
292
months = [
264
293
self .monthdatescalendar (year , i )
265
- for i in range (January , January + 12 )
294
+ for i in range (Months . JANUARY , Months . JANUARY + 12 )
266
295
]
267
296
return [months [i :i + width ] for i in range (0 , len (months ), width ) ]
268
297
@@ -275,7 +304,7 @@ def yeardays2calendar(self, year, width=3):
275
304
"""
276
305
months = [
277
306
self .monthdays2calendar (year , i )
278
- for i in range (January , January + 12 )
307
+ for i in range (Months . JANUARY , Months . JANUARY + 12 )
279
308
]
280
309
return [months [i :i + width ] for i in range (0 , len (months ), width ) ]
281
310
@@ -287,7 +316,7 @@ def yeardayscalendar(self, year, width=3):
287
316
"""
288
317
months = [
289
318
self .monthdayscalendar (year , i )
290
- for i in range (January , January + 12 )
319
+ for i in range (Months . JANUARY , Months . JANUARY + 12 )
291
320
]
292
321
return [months [i :i + width ] for i in range (0 , len (months ), width ) ]
293
322
@@ -509,7 +538,7 @@ def formatyear(self, theyear, width=3):
509
538
a ('\n ' )
510
539
a ('<tr><th colspan="%d" class="%s">%s</th></tr>' % (
511
540
width , self .cssclass_year_head , theyear ))
512
- for i in range (January , January + 12 , width ):
541
+ for i in range (Months . JANUARY , Months . JANUARY + 12 , width ):
513
542
# months in this row
514
543
months = range (i , min (i + width , 13 ))
515
544
a ('<tr>' )
@@ -616,7 +645,7 @@ def formatmonthname(self, theyear, themonth, withyear=True):
616
645
firstweekday = c .getfirstweekday
617
646
618
647
def setfirstweekday (firstweekday ):
619
- if not MONDAY <= firstweekday <= SUNDAY :
648
+ if not Weekdays . MONDAY <= firstweekday <= Weekdays . SUNDAY :
620
649
raise IllegalWeekdayError (firstweekday )
621
650
c .firstweekday = firstweekday
622
651
0 commit comments