summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPrince Roshan <princekrroshan01@gmail.com>2023-04-25 02:51:27 (GMT)
committerGitHub <noreply@github.com>2023-04-25 02:51:27 (GMT)
commitb934f97850b7b2db30fa2b26720d58aac4783149 (patch)
treee8be6e7a0c32dc3310d134aef35744d0cde14849
parent57f8f9a66d4d0b5e590f7746a58136b3b45b1336 (diff)
downloadcpython-b934f97850b7b2db30fa2b26720d58aac4783149.zip
cpython-b934f97850b7b2db30fa2b26720d58aac4783149.tar.gz
cpython-b934f97850b7b2db30fa2b26720d58aac4783149.tar.bz2
gh-103636: add enums for days and months in calendar module (GH-103642)
Convert day contants to a Day enum, and add a Month enum.
-rw-r--r--Lib/calendar.py60
-rw-r--r--Misc/NEWS.d/next/Library/2023-04-21-10-25-39.gh-issue-103636.YK6NEa.rst1
2 files changed, 40 insertions, 21 deletions
diff --git a/Lib/calendar.py b/Lib/calendar.py
index 6573964..c219f0c 100644
--- a/Lib/calendar.py
+++ b/Lib/calendar.py
@@ -7,6 +7,7 @@ set the first day of the week (0=Monday, 6=Sunday)."""
import sys
import datetime
+from enum import IntEnum, global_enum
import locale as _locale
from itertools import repeat
@@ -16,6 +17,9 @@ __all__ = ["IllegalMonthError", "IllegalWeekdayError", "setfirstweekday",
"timegm", "month_name", "month_abbr", "day_name", "day_abbr",
"Calendar", "TextCalendar", "HTMLCalendar", "LocaleTextCalendar",
"LocaleHTMLCalendar", "weekheader",
+ "Day", "Month", "JANUARY", "FEBRUARY", "MARCH",
+ "APRIL", "MAY", "JUNE", "JULY",
+ "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER",
"MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY",
"SATURDAY", "SUNDAY"]
@@ -37,9 +41,35 @@ class IllegalWeekdayError(ValueError):
return "bad weekday number %r; must be 0 (Monday) to 6 (Sunday)" % self.weekday
-# Constants for months referenced later
-January = 1
-February = 2
+# Constants for months
+@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
+ NOVEMBER = 11
+ DECEMBER = 12
+
+
+# Constants for days
+@global_enum
+class Day(IntEnum):
+ MONDAY = 0
+ TUESDAY = 1
+ WEDNESDAY = 2
+ THURSDAY = 3
+ FRIDAY = 4
+ SATURDAY = 5
+ SUNDAY = 6
+
+
# 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 +125,6 @@ day_abbr = _localized_day('%a')
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 +152,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):
@@ -260,10 +287,7 @@ class Calendar(object):
Each month contains between 4 and 6 weeks and each week contains 1-7
days. Days are datetime.date objects.
"""
- months = [
- self.monthdatescalendar(year, i)
- for i in range(January, January+12)
- ]
+ months = [self.monthdatescalendar(year, m) for m in Month]
return [months[i:i+width] for i in range(0, len(months), width) ]
def yeardays2calendar(self, year, width=3):
@@ -273,10 +297,7 @@ class Calendar(object):
(day number, weekday number) tuples. Day numbers outside this month are
zero.
"""
- months = [
- self.monthdays2calendar(year, i)
- for i in range(January, January+12)
- ]
+ months = [self.monthdays2calendar(year, m) for m in Month]
return [months[i:i+width] for i in range(0, len(months), width) ]
def yeardayscalendar(self, year, width=3):
@@ -285,10 +306,7 @@ class Calendar(object):
yeardatescalendar()). Entries in the week lists are day numbers.
Day numbers outside this month are zero.
"""
- months = [
- self.monthdayscalendar(year, i)
- for i in range(January, January+12)
- ]
+ months = [self.monthdayscalendar(year, m) for m in Month]
return [months[i:i+width] for i in range(0, len(months), width) ]
@@ -509,7 +527,7 @@ class HTMLCalendar(Calendar):
a('\n')
a('<tr><th colspan="%d" class="%s">%s</th></tr>' % (
width, self.cssclass_year_head, theyear))
- for i in range(January, January+12, width):
+ for i in range(JANUARY, JANUARY+12, width):
# months in this row
months = range(i, min(i+width, 13))
a('<tr>')
diff --git a/Misc/NEWS.d/next/Library/2023-04-21-10-25-39.gh-issue-103636.YK6NEa.rst b/Misc/NEWS.d/next/Library/2023-04-21-10-25-39.gh-issue-103636.YK6NEa.rst
new file mode 100644
index 0000000..b3b5085
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-04-21-10-25-39.gh-issue-103636.YK6NEa.rst
@@ -0,0 +1 @@
+Added Enum for months and days in the calendar module.