From e0427ba9470f861767e57570f3ef32f698437a21 Mon Sep 17 00:00:00 2001 From: Prince Roshan Date: Thu, 20 Apr 2023 08:44:34 +0530 Subject: [PATCH 1/5] gh-103636: Convert Calander consts to enum and add consts for months --- Lib/calendar.py | 51 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/Lib/calendar.py b/Lib/calendar.py index 657396439c91fc..8bc84a0bddf4d5 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,6 +17,9 @@ "timegm", "month_name", "month_abbr", "day_name", "day_abbr", "Calendar", "TextCalendar", "HTMLCalendar", "LocaleTextCalendar", "LocaleHTMLCalendar", "weekheader", + "Weekday", "Month", "JANUARY", "FEBRUARY", "MARCH", + "APRIL", "MAY", "JUNE", "JULY", + "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMEMBER", "DECEMBER", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"] @@ -37,6 +41,35 @@ 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 @@ -95,9 +128,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.""" @@ -260,10 +290,7 @@ def yeardatescalendar(self, year, width=3): 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 +300,7 @@ def yeardays2calendar(self, year, width=3): (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 +309,7 @@ def yeardayscalendar(self, year, width=3): 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) ] From 41d42f1aa9fedd1f0b01756a81a31cdd32a5ca1f Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Fri, 21 Apr 2023 10:25:41 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../next/Library/2023-04-21-10-25-39.gh-issue-103636.YK6NEa.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Library/2023-04-21-10-25-39.gh-issue-103636.YK6NEa.rst 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 00000000000000..125b2920ed46e6 --- /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 Month and Weekday in the calendar module From 3aac302d9a13b8169388c8895dcf731012646f0e Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Fri, 21 Apr 2023 10:25:41 +0000 Subject: [PATCH 3/5] fix spelling mistake and modify news entry --- Lib/calendar.py | 10 +++++----- .../2023-04-21-10-25-39.gh-issue-103636.YK6NEa.rst | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2023-04-21-10-25-39.gh-issue-103636.YK6NEa.rst diff --git a/Lib/calendar.py b/Lib/calendar.py index 8bc84a0bddf4d5..9a81d17d02a957 100644 --- a/Lib/calendar.py +++ b/Lib/calendar.py @@ -17,9 +17,9 @@ "timegm", "month_name", "month_abbr", "day_name", "day_abbr", "Calendar", "TextCalendar", "HTMLCalendar", "LocaleTextCalendar", "LocaleHTMLCalendar", "weekheader", - "Weekday", "Month", "JANUARY", "FEBRUARY", "MARCH", + "Day", "Month", "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", - "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMEMBER", "DECEMBER", + "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER", "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"] @@ -54,13 +54,13 @@ class Month(IntEnum): AUGUST = 8 SEPTEMBER = 9 OCTOBER = 10 - NOVEMEMBER = 11 + NOVEMBER = 11 DECEMBER = 12 -# Constants for weekdays +# Constants for days @global_enum -class Weekday(IntEnum): +class Day(IntEnum): MONDAY = 0 TUESDAY = 1 WEDNESDAY = 2 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 00000000000000..b3b5085250f078 --- /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. From ca979850fd1ef531c622a059d91dc74ac6c651e3 Mon Sep 17 00:00:00 2001 From: Prince Roshan Date: Tue, 25 Apr 2023 06:52:45 +0530 Subject: [PATCH 4/5] Remove January and February Constants --- Lib/calendar.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/Lib/calendar.py b/Lib/calendar.py index 9a81d17d02a957..f8de8b086abf23 100644 --- a/Lib/calendar.py +++ b/Lib/calendar.py @@ -23,7 +23,7 @@ "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"] -# Exception raised for bad input (with string parameter for details) + error = ValueError # Exceptions raised for bad input @@ -41,7 +41,7 @@ def __str__(self): return "bad weekday number %r; must be 0 (Monday) to 6 (Sunday)" % self.weekday -# Constants for months referenced later +# Constants for months @global_enum class Month(IntEnum): JANUARY = 1 @@ -70,9 +70,6 @@ class Day(IntEnum): 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] @@ -155,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): @@ -530,7 +527,7 @@ def formatyear(self, theyear, width=3): a('\n') a('%s' % ( 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('') From a2b14db8b1b0f78541901e4cfba8712487b3f3f1 Mon Sep 17 00:00:00 2001 From: Prince Roshan Date: Tue, 25 Apr 2023 06:57:59 +0530 Subject: [PATCH 5/5] Revert accidental removal of a comment --- Lib/calendar.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/calendar.py b/Lib/calendar.py index f8de8b086abf23..c219f0c218d9fa 100644 --- a/Lib/calendar.py +++ b/Lib/calendar.py @@ -23,7 +23,7 @@ "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"] - +# Exception raised for bad input (with string parameter for details) error = ValueError # Exceptions raised for bad input