Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
lib-py-b2b / holidays.py
Size: Mime:
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)