Skip to content

Commit 32e9466

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

File tree

1 file changed

+42
-13
lines changed

1 file changed

+42
-13
lines changed

Diff for: Lib/calendar.py

+42-13
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import sys
99
import datetime
10+
from enum import IntEnum
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+
"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)
4577
mdays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
@@ -95,9 +127,6 @@ def __len__(self):
95127
month_name = _localized_month('%B')
96128
month_abbr = _localized_month('%b')
97129

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

102131
def 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 == Months.FEBRUARY and isleap(year))
129158
return day1, ndays
130159

131160

132161
def _monthlen(year, month):
133-
return mdays[month] + (month == February and isleap(year))
162+
return mdays[month] + (month == Months.FEBRUARY and isleap(year))
134163

135164

136165
def _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(Months.JANUARY, Months.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(Months.JANUARY, Months.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(Months.JANUARY, Months.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(Months.JANUARY, Months.JANUARY+12, width):
513542
# months in this row
514543
months = range(i, min(i+width, 13))
515544
a('<tr>')
@@ -616,7 +645,7 @@ def formatmonthname(self, theyear, themonth, withyear=True):
616645
firstweekday = c.getfirstweekday
617646

618647
def setfirstweekday(firstweekday):
619-
if not MONDAY <= firstweekday <= SUNDAY:
648+
if not Weekdays.MONDAY <= firstweekday <= Weekdays.SUNDAY:
620649
raise IllegalWeekdayError(firstweekday)
621650
c.firstweekday = firstweekday
622651

0 commit comments

Comments
 (0)