Source code for businessdate.businessholidays

# -*- coding: utf-8 -*-

# businessdate
# ------------
# Python library for generating business dates for fast date operations
# and rich functionality.
# 
# Author:   sonntagsgesicht, based on a fork of Deutsche Postbank [pbrisk]
# Version:  0.5, copyright Wednesday, 18 September 2019
# Website:  https://github.com/sonntagsgesicht/businessdate
# License:  Apache License 2.0 (see LICENSE file)


from datetime import date, timedelta

from .ymd import easter


[docs]class BusinessHolidays(list): """ holiday calendar class A :class:`BusinessHolidays` instance imitated a list of :class:`datetime.date` which can be used to check if a :class:`BusinessDate` is included as holiday. For convenience input need not to be of type :class:`datetime.date`. Duck typing is enough, i.e. having properties `year`, `month` and `day`. """ def __init__(self, iterable=()): if iterable: # iterable = map(BusinessDate, iterable) iterable = [bd if isinstance(bd, date) else date(bd.year, bd.month, bd.day) for bd in iterable] super(BusinessHolidays, self).__init__(iterable) def __contains__(self, item): if super(BusinessHolidays, self).__contains__(item): return True return super(BusinessHolidays, self).__contains__(date(item.year, item.month, item.day))
[docs]class TargetHolidays(BusinessHolidays): """ holiday calendar class of ecb target2 holidays Target holidays are * Jan, 1st * Good Friday * Easter Monday * May, 1st * December, 25th (Christmas Day) * December, 25th (Boxing Day) """ def __contains__(self, item): if not super(TargetHolidays, self).__contains__(date(item.year, 1, 1)): # add tar days if not done jet e = date(*easter(item.year)) target_days = dict() target_days[date(item.year, 1, 1)] = "New Year's Day" target_days[e - timedelta(2)] = "Black Friday" target_days[e + timedelta(1)] = "Easter Monday" target_days[date(item.year, 5, 1)] = "Labour Day" target_days[date(item.year, 12, 25)] = "First Christmas Day" target_days[date(item.year, 12, 26)] = "Second Christmas Day" self.extend(list(target_days.keys())) return super(TargetHolidays, self).__contains__(item)