Browse Source

date parsing replaced with _parse_date function

This is to avoid ambiguity and keep date parsing uniform
UserDict-trial
Gourav Kumar 2 years ago
parent
commit
44d5ea7b29
  1. 27
      fincal/fincal.py

27
fincal/fincal.py

@ -5,7 +5,7 @@ from typing import List, Union
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from .core import AllFrequencies, TimeSeriesCore, _preprocess_match_options from .core import AllFrequencies, TimeSeriesCore, _parse_date, _preprocess_match_options
def create_date_series( def create_date_series(
@ -113,12 +113,13 @@ class TimeSeries(TimeSeriesCore):
def calculate_returns( def calculate_returns(
self, self,
as_on: datetime.datetime, as_on: Union[str, datetime.datetime],
as_on_match: str = "closest", as_on_match: str = "closest",
prior_match: str = "closest", prior_match: str = "closest",
closest: str = "previous", closest: str = "previous",
compounding: bool = True, compounding: bool = True,
years: int = 1, years: int = 1,
date_format: str = None
) -> float: ) -> float:
"""Method to calculate returns for a certain time-period as on a particular date """Method to calculate returns for a certain time-period as on a particular date
@ -158,6 +159,7 @@ class TimeSeries(TimeSeriesCore):
>>> calculate_returns(datetime.date(2020, 1, 1), years=1) >>> calculate_returns(datetime.date(2020, 1, 1), years=1)
""" """
as_on = _parse_date(as_on, date_format)
as_on_delta, prior_delta = _preprocess_match_options(as_on_match, prior_match, closest) as_on_delta, prior_delta = _preprocess_match_options(as_on_match, prior_match, closest)
while True: while True:
@ -184,21 +186,28 @@ class TimeSeries(TimeSeriesCore):
def calculate_rolling_returns( def calculate_rolling_returns(
self, self,
from_date: datetime.date, from_date: Union[datetime.date, str],
to_date: datetime.date, to_date: Union[datetime.date, str],
frequency: str = "D", frequency: str = None,
as_on_match: str = "closest", as_on_match: str = "closest",
prior_match: str = "closest", prior_match: str = "closest",
closest: str = "previous", closest: str = "previous",
compounding: bool = True, compounding: bool = True,
years: int = 1, years: int = 1,
date_format: str = None
) -> List[tuple]: ) -> List[tuple]:
"""Calculates the rolling return""" """Calculates the rolling return"""
try: from_date = _parse_date(from_date, date_format)
frequency = getattr(AllFrequencies, frequency) to_date = _parse_date(to_date, date_format)
except AttributeError:
raise ValueError(f"Invalid argument for frequency {frequency}") if frequency is None:
frequency = self.frequency
else:
try:
frequency = getattr(AllFrequencies, frequency)
except AttributeError:
raise ValueError(f"Invalid argument for frequency {frequency}")
dates = create_date_series(from_date, to_date, frequency.symbol) dates = create_date_series(from_date, to_date, frequency.symbol)
if frequency == AllFrequencies.D: if frequency == AllFrequencies.D:

Loading…
Cancel
Save