diff --git a/Lib/calendar.py b/Lib/calendar.py index 657396439c91fcb..531e08cbe185d18 100644 --- a/Lib/calendar.py +++ b/Lib/calendar.py @@ -7,6 +7,7 @@ import sys import datetime +from enum import IntEnum, global_enum import locale as _locale from itertools import repeat @@ -16,7 +17,10 @@ "timegm", "month_name", "month_abbr", "day_name", "day_abbr", "Calendar", "TextCalendar", "HTMLCalendar", "LocaleTextCalendar", "LocaleHTMLCalendar", "weekheader", - "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", + "Weekday", "Month", "JANUARY", "FEBRUARY", "MARCH", + "APRIL", "MAY", "JUNE", "JULY", + "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMEMBER", "DECEMBER", + "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"] # Exception raised for bad input (with string parameter for details) @@ -37,10 +41,40 @@ def __str__(self): return "bad weekday number %r; must be 0 (Monday) to 6 (Sunday)" % self.weekday +# Constants for months referenced later +@global_enum +class Month(IntEnum): + JANUARY = 1 + FEBRUARY = 2 + MARCH = 3 + APRIL = 4 + MAY = 5 + JUNE = 6 + JULY = 7 + AUGUST = 8 + SEPTEMBER = 9 + OCTOBER = 10 + NOVEMEMBER = 11 + DECEMBER = 12 + + +# Constants for weekdays +@global_enum +class Weekday(IntEnum): + MONDAY = 0 + TUESDAY = 1 + WEDNESDAY = 2 + THURSDAY = 3 + FRIDAY = 4 + SATURDAY = 5 + SUNDAY = 6 + + # Constants for months referenced later January = 1 February = 2 + # Number of days per month (except for February in leap years) mdays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] @@ -95,9 +129,6 @@ def __len__(self): month_name = _localized_month('%B') month_abbr = _localized_month('%b') -# Constants for weekdays -(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7) - def isleap(year): """Return True for leap years, False for non-leap years.""" @@ -125,12 +156,12 @@ def monthrange(year, month): if not 1 <= month <= 12: raise IllegalMonthError(month) day1 = weekday(year, month, 1) - ndays = mdays[month] + (month == February and isleap(year)) + ndays = mdays[month] + (month == FEBRUARY and isleap(year)) return day1, ndays def _monthlen(year, month): - return mdays[month] + (month == February and isleap(year)) + return mdays[month] + (month == FEBRUARY and isleap(year)) def _prevmonth(year, month): @@ -261,8 +292,8 @@ def yeardatescalendar(self, year, width=3): days. Days are datetime.date objects. """ months = [ - self.monthdatescalendar(year, i) - for i in range(January, January+12) + self.monthdatescalendar(year, m) + for m in Month ] return [months[i:i+width] for i in range(0, len(months), width) ] @@ -274,8 +305,8 @@ def yeardays2calendar(self, year, width=3): zero. """ months = [ - self.monthdays2calendar(year, i) - for i in range(January, January+12) + self.monthdays2calendar(year, m) + for m in Month ] return [months[i:i+width] for i in range(0, len(months), width) ] @@ -286,8 +317,8 @@ def yeardayscalendar(self, year, width=3): Day numbers outside this month are zero. """ months = [ - self.monthdayscalendar(year, i) - for i in range(January, January+12) + self.monthdayscalendar(year, m) + for m in Month ] return [months[i:i+width] for i in range(0, len(months), width) ]