# -*- 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 .businessperiod import BusinessPeriod
from .businessdate import BusinessDate
from .businessrange import BusinessRange
[docs]class BusinessSchedule(BusinessRange):
def __init__(self, start, end, step, roll=None):
""" class to build date schedules incl start and end date
:param BusinessDate start: start date of schedule
:param BusinessDate end: end date of schedule
:param BusinessPeriod step: period distance of two dates
:param BusinessDate roll: origin of schedule
convenient class to build date schedules
a schedule includes always start and end date
and rolls on roll, i.e. builds a sequence by
adding and/or substracting step to/from roll.
start and end slice the relevant dates.
"""
roll = roll if roll else end
roll = BusinessDate(roll)
start = BusinessDate(start,
convention=roll.convention,
holidays=roll.holidays,
day_count=roll.day_count)
end = BusinessDate(end,
convention=roll.convention,
holidays=roll.holidays,
day_count=roll.day_count)
super(BusinessSchedule, self).__init__(start, end, step, roll)
if start not in self:
self.insert(0, start)
if end not in self:
self.append(end)
[docs] def first_stub_long(self):
""" adjusts the schedule to have a long stub at the beginning,
i.e. first period is longer a regular step.
"""
if len(self) > 2:
self.pop(1)
return self
[docs] def last_stub_long(self):
""" adjusts the schedule to have a long stub at the end,
i.e. last period is longer a regular step.
"""
if len(self) > 2:
self.pop(-2)
return self