54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
import datetime
|
|
|
|
|
|
class DateRange:
|
|
|
|
def __init__(self, start_date: datetime.date, end_date: datetime.date):
|
|
if type(start_date) != datetime.date or type(end_date) != datetime.date:
|
|
raise TypeError("start_date and end_date must be date objects.")
|
|
|
|
if start_date > end_date:
|
|
raise ValueError("start_date can't be after end_date.")
|
|
|
|
self._start_date = start_date
|
|
self._end_date = end_date
|
|
|
|
@property
|
|
def start_date(self):
|
|
return self._start_date
|
|
|
|
@start_date.setter
|
|
def start_date(self, value: datetime.date):
|
|
if type(value) != datetime.date:
|
|
raise TypeError("start_date must be a date object.")
|
|
|
|
if value > self._end_date:
|
|
raise ValueError("start_date can't be after end_date.")
|
|
|
|
self._start_date = value
|
|
|
|
@property
|
|
def end_date(self):
|
|
return self._end_date
|
|
|
|
@end_date.setter
|
|
def end_date(self, value: datetime.date):
|
|
if type(value) != datetime.date:
|
|
raise TypeError("end_date must be a date object.")
|
|
|
|
if value < self._start_date:
|
|
raise ValueError("end_date can't be before start_date.")
|
|
|
|
self._end_date = value
|
|
|
|
def __eq__(self, other: "DateRange") -> bool:
|
|
if not isinstance(other, DateRange):
|
|
raise TypeError("DataRange can only be compared to other DateRange.")
|
|
|
|
start_dates_are_different = self.start_date != other.start_date
|
|
end_dates_are_different = self.end_date != other.end_date
|
|
|
|
if start_dates_are_different or end_dates_are_different:
|
|
return False
|
|
|
|
return True
|