7
7
8
8
import sys
9
9
import datetime
10
+ from enum import IntEnum , global_enum
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
+ "Weekday" , "Month" , "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)
@@ -37,10 +41,40 @@ def __str__(self):
37
41
return "bad weekday number %r; must be 0 (Monday) to 6 (Sunday)" % self .weekday
38
42
39
43
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
+
40
73
# Constants for months referenced later
41
74
January = 1
42
75
February = 2
43
76
77
+
44
78
# Number of days per month (except for February in leap years)
45
79
mdays = [0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 ]
46
80
@@ -95,9 +129,6 @@ def __len__(self):
95
129
month_name = _localized_month ('%B' )
96
130
month_abbr = _localized_month ('%b' )
97
131
98
- # Constants for weekdays
99
- (MONDAY , TUESDAY , WEDNESDAY , THURSDAY , FRIDAY , SATURDAY , SUNDAY ) = range (7 )
100
-
101
132
102
133
def isleap (year ):
103
134
"""Return True for leap years, False for non-leap years."""
@@ -125,12 +156,12 @@ def monthrange(year, month):
125
156
if not 1 <= month <= 12 :
126
157
raise IllegalMonthError (month )
127
158
day1 = weekday (year , month , 1 )
128
- ndays = mdays [month ] + (month == February and isleap (year ))
159
+ ndays = mdays [month ] + (month == FEBRUARY and isleap (year ))
129
160
return day1 , ndays
130
161
131
162
132
163
def _monthlen (year , month ):
133
- return mdays [month ] + (month == February and isleap (year ))
164
+ return mdays [month ] + (month == FEBRUARY and isleap (year ))
134
165
135
166
136
167
def _prevmonth (year , month ):
@@ -261,8 +292,8 @@ def yeardatescalendar(self, year, width=3):
261
292
days. Days are datetime.date objects.
262
293
"""
263
294
months = [
264
- self .monthdatescalendar (year , i )
265
- for i in range ( January , January + 12 )
295
+ self .monthdatescalendar (year , m )
296
+ for m in Month
266
297
]
267
298
return [months [i :i + width ] for i in range (0 , len (months ), width ) ]
268
299
@@ -274,8 +305,8 @@ def yeardays2calendar(self, year, width=3):
274
305
zero.
275
306
"""
276
307
months = [
277
- self .monthdays2calendar (year , i )
278
- for i in range ( January , January + 12 )
308
+ self .monthdays2calendar (year , m )
309
+ for m in Month
279
310
]
280
311
return [months [i :i + width ] for i in range (0 , len (months ), width ) ]
281
312
@@ -286,8 +317,8 @@ def yeardayscalendar(self, year, width=3):
286
317
Day numbers outside this month are zero.
287
318
"""
288
319
months = [
289
- self .monthdayscalendar (year , i )
290
- for i in range ( January , January + 12 )
320
+ self .monthdayscalendar (year , m )
321
+ for m in Month
291
322
]
292
323
return [months [i :i + width ] for i in range (0 , len (months ), width ) ]
293
324
0 commit comments