Skip to content

Commit 0c833ec

Browse files
Amélioration des performances (#18)
* speedup is_holiday * Simplify --------- Co-authored-by: Antoine Augusti <[email protected]>
1 parent 2de5a68 commit 0c833ec

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

vacances_scolaires_france/__init__.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)