Files
exercism/python/meetup/meetup.py
2019-07-17 02:21:19 -05:00

39 lines
1.1 KiB
Python

import datetime, pprint, calendar
ordinal_meaning = {
'first' : 0,
'second' : 1,
'third' : 2,
'fourth' : 3,
'fifth' : 4,
'last' : -1
}
weekday_meaning = {
'monday' : 0,
'tuesday' : 1,
'wednesday' : 2,
'thursday' : 3,
'friday' : 4,
'saturday' : 5,
'sunday' : 6
}
class MeetupDayException(Exception):
def __init__(self, expression, message):
self.expression, self.message = expression, message
def meetup(year, month, week, day_of_week):
# Get all days in a month
days = [datetime.date(year, month, day) for day in range(1, calendar.monthrange(year, month)[1] + 1)]
# Filter to the day of week being targeted
days = [date for date in days if date.weekday() == weekday_meaning[day_of_week.lower()]]
if week in ordinal_meaning.keys():
return days[ordinal_meaning[week]]
elif week == 'teenth':
return [date for date in days if date.day <= 19 and date.day >= 13][0]
else:
try:
return days[int(week[0]) - 1]
except IndexError as err:
raise MeetupDayException(err, "Invalid date parameter \'{}\'".format(week))