Repository URL to install this package:
|
Version:
0.4.201 ▾
|
lib-py-b2b
/
holidays.py
|
|---|
from datetime import date
from dateutil.relativedelta import *
import logging
import holidays
logger = logging.getLogger(__name__)
class Holidays:
@staticmethod
def get(calendar_name, years=None, expand=True, observed=True, prov=None, state='NC') -> 'Holidays':
if years is None:
years = []
if calendar_name == "BMC" or calendar_name == "BarnhardtCalendar" or calendar_name == "BarnhardtHolidayCalendar":
return Holidays(BarnhardtHolidays(years=years, expand=expand, observed=observed, prov=prov, state=state), calendar_name)
elif calendar_name == "UnitedStates" or calendar_name == "US":
return Holidays(holidays.UnitedStates(years=years, expand=expand, observed=observed, prov=prov, state=state), calendar_name)
else:
return Holidays(holidays.CountryHoliday(country=calendar_name, prov=prov, state=state), calendar_name)
def __init__(self, base: holidays.HolidayBase, name):
self.base = base
self.name = name
def __contains__(self, item):
return self.base.__contains__(item)
def __str__(self):
_str = ""
for date, name in sorted(holidays.US(state='CA', years=2014).items()):
_str += f"{date}, {name}\n"
return _str
def describe(self):
return list(map(lambda x: self.base.get(x), self.base.keys()))
class BarnhardtHolidays(holidays.UnitedStates):
def __init__(self, years=[], expand=True, observed=True, prov=None, state='NC'):
super().__init__(years=years, expand=expand, observed=observed, prov=prov, state=state)
def _populate(self, year):
# Populate the holiday list with the default US holidays
holidays.UnitedStates._populate(self, year)
# Remove Presidents Day
self.pop(date(year, 2, 1) + relativedelta(weekday=MO(+3)), None)
# remove MLK day
self.pop(date(year, 1, 1) + relativedelta(weekday=MO(+3)), None)
# remove Columbus day
self.pop(date(year, 10, 1) + relativedelta(weekday=MO(+2)), None)
# remove veterans day
if date(year, 11, 11) in self:
self.pop(date(year, 11, 11), None)
if date(year, 11, 11) + relativedelta(days=-1) in self:
self.pop(date(year, 11, 11) + relativedelta(days=-1), None)
if date(year, 11, 11) + relativedelta(days=+1) in self:
self.pop(date(year, 11, 11) + relativedelta(days=+1), None)
# remove day after Thanksgiving
self.pop(date(year, 11, 1) + relativedelta(weekday=TH(+4)) + relativedelta(days=+1), None)
# remove Christmas eve
self.pop(date(year, 12, 24), None)
# remove the day after Christmas
self.pop(date(year, 12, 26), None)