Skip to content

Commit 97a6011

Browse files
committed
pythongh-103636: Convert Calander consts to enum and add consts for months
1 parent 6be7aee commit 97a6011

File tree

1 file changed

+43
-12
lines changed

1 file changed

+43
-12
lines changed

Lib/calendar.py

+43-12
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import sys
99
import datetime
10+
from enum import IntEnum, global_enum
1011
import locale as _locale
1112
from itertools import repeat
1213

@@ -16,7 +17,10 @@
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
4174
January = 1
4275
February = 2
4376

77+
4478
# Number of days per month (except for February in leap years)
4579
mdays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
4680

@@ -95,9 +129,6 @@ def __len__(self):
95129
month_name = _localized_month('%B')
96130
month_abbr = _localized_month('%b')
97131

98-
# Constants for weekdays
99-
(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7)
100-
101132

102133
def isleap(year):
103134
"""Return True for leap years, False for non-leap years."""
@@ -125,12 +156,12 @@ def monthrange(year, month):
125156
if not 1 <= month <= 12:
126157
raise IllegalMonthError(month)
127158
day1 = weekday(year, month, 1)
128-
ndays = mdays[month] + (month == February and isleap(year))
159+
ndays = mdays[month] + (month == FEBRUARY and isleap(year))
129160
return day1, ndays
130161

131162

132163
def _monthlen(year, month):
133-
return mdays[month] + (month == February and isleap(year))
164+
return mdays[month] + (month == FEBRUARY and isleap(year))
134165

135166

136167
def _prevmonth(year, month):
@@ -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

Comments
 (0)