Repository URL to install this package:
| 
      
     
      
        
        
        Version: 
        
         
  
        
    
          
          0.4.198  ▾
        
         
  
      
        
      
  
      
  
     | 
    
    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)