Closes bpo-28292: Implemented Calendar.itermonthdays3() and itermonthdays4(). (#4079)

Calendar.itermonthdates() will now consistently raise an exception when a date falls outside of the 0001-01-01 through 9999-12-31 range. To support applications that cannot tolerate such exceptions, the new methods itermonthdays3() and itermonthdays4() are added. The new methods return tuples and are not restricted by the range supported by datetime.date.

Thanks @serhiy-storchaka for suggesting the itermonthdays4() method and for the review.
This commit is contained in:
Alexander Belopolsky 2017-10-24 13:17:10 -04:00 committed by GitHub
parent eab3ff72eb
commit fdd9b217c6
4 changed files with 101 additions and 35 deletions

View file

@ -502,10 +502,15 @@ class CalendarTestCase(unittest.TestCase):
new_october = calendar.TextCalendar().formatmonthname(2010, 10, 10)
self.assertEqual(old_october, new_october)
def test_itermonthdates(self):
# ensure itermonthdates doesn't overflow after datetime.MAXYEAR
# see #15421
list(calendar.Calendar().itermonthdates(datetime.MAXYEAR, 12))
def test_itermonthdays3(self):
# ensure itermonthdays3 doesn't overflow after datetime.MAXYEAR
list(calendar.Calendar().itermonthdays3(datetime.MAXYEAR, 12))
def test_itermonthdays4(self):
cal = calendar.Calendar(firstweekday=3)
days = list(cal.itermonthdays4(2001, 2))
self.assertEqual(days[0], (2001, 2, 1, 3))
self.assertEqual(days[-1], (2001, 2, 28, 2))
def test_itermonthdays(self):
for firstweekday in range(7):
@ -846,7 +851,8 @@ class MiscTestCase(unittest.TestCase):
blacklist = {'mdays', 'January', 'February', 'EPOCH',
'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY',
'SATURDAY', 'SUNDAY', 'different_locale', 'c',
'prweek', 'week', 'format', 'formatstring', 'main'}
'prweek', 'week', 'format', 'formatstring', 'main',
'monthlen', 'prevmonth', 'nextmonth'}
support.check__all__(self, calendar, blacklist=blacklist)