@@ -31,6 +31,8 @@ def __init__(self):
3131 super (SchoolHolidayDates , self ).__init__ ()
3232 self .data = {}
3333 self .load_data ()
34+ self .min_year = min (self .data .keys ()).year
35+ self .max_year = max (self .data .keys ()).year
3436
3537 def load_data (self ):
3638 filename = os .path .join (os .path .dirname (__file__ ), "data/data.csv" )
@@ -62,27 +64,26 @@ def check_name(self, name):
6264 if name not in self .SUPPORTED_HOLIDAY_NAMES :
6365 raise UnsupportedHolidayException ("Unknown holiday name: " + name )
6466
65- def is_holiday (self , date ):
67+ def check_date (self , date ):
6668 if not type (date ) is datetime .date :
6769 raise ValueError ("date should be a datetime.date" )
68- return date in self .holidays_for_year (date .year )
70+ if date .year < self .min_year or date .year > self .max_year :
71+ raise UnsupportedYearException ("No data for year: " + str (date .year ))
72+
73+ def is_holiday (self , date ):
74+ self .check_date (date )
75+ return date in self .data
6976
7077 def is_holiday_for_zone (self , date , zone ):
71- if not type (date ) is datetime .date :
72- raise ValueError ("date should be a datetime.date" )
73- try :
74- holidays_for_year = self .holidays_for_year (date .year )
75- return holidays_for_year [date ][self .zone_key (zone )]
76- except KeyError :
78+ self .check_date (date )
79+ if date not in self .data :
7780 return False
81+ return self .data [date ][self .zone_key (zone )]
7882
7983 def holidays_for_year (self , year ):
80- res = {k : v for k , v in self .data .items () if k .year == year }
81-
82- if len (res ) == 0 :
84+ if year < self .min_year or year > self .max_year :
8385 raise UnsupportedYearException ("No data for year: " + str (year ))
84-
85- return res
86+ return {k : v for k , v in self .data .items () if k .year == year }
8687
8788 def holiday_for_year_by_name (self , year , name ):
8889 self .check_name (name )
0 commit comments