Replaced the Period.get_instance method with the get_period function in the "accounting.report.period.parser" module. Changed the parse_spec function in the "accounting.report.period.parser" to private.
This commit is contained in:
@ -18,4 +18,5 @@
|
||||
|
||||
"""
|
||||
from .chooser import PeriodChooser
|
||||
from .parser import get_period
|
||||
from .period import Period
|
||||
|
@ -20,12 +20,43 @@
|
||||
import calendar
|
||||
import re
|
||||
from datetime import date
|
||||
import typing as t
|
||||
|
||||
from .period import Period, ThisMonth, LastMonth, SinceLastMonth, ThisYear, \
|
||||
LastYear, Today, Yesterday, AllTime
|
||||
|
||||
DATE_SPEC_RE: str = r"(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?"
|
||||
"""The regular expression of a date specification."""
|
||||
|
||||
|
||||
def parse_spec(text: str) -> tuple[date | None, date | None]:
|
||||
def get_period(spec: str | None = None) -> Period:
|
||||
"""Returns a period instance.
|
||||
|
||||
:param spec: The period specification, or omit for the default.
|
||||
:return: The period instance.
|
||||
:raise ValueError: When the period specification is invalid.
|
||||
"""
|
||||
if spec is None:
|
||||
return ThisMonth()
|
||||
named_periods: dict[str, t.Type[t.Callable[[], Period]]] = {
|
||||
"this-month": lambda: ThisMonth(),
|
||||
"last-month": lambda: LastMonth(),
|
||||
"since-last-month": lambda: SinceLastMonth(),
|
||||
"this-year": lambda: ThisYear(),
|
||||
"last-year": lambda: LastYear(),
|
||||
"today": lambda: Today(),
|
||||
"yesterday": lambda: Yesterday(),
|
||||
"all-time": lambda: AllTime(),
|
||||
}
|
||||
if spec in named_periods:
|
||||
return named_periods[spec]()
|
||||
start, end = __parse_spec(spec)
|
||||
if start is not None and end is not None and start > end:
|
||||
raise ValueError
|
||||
return Period(start, end)
|
||||
|
||||
|
||||
def __parse_spec(text: str) -> tuple[date | None, date | None]:
|
||||
"""Parses the period specification.
|
||||
|
||||
:param text: The period specification.
|
||||
|
@ -26,7 +26,6 @@ from datetime import date, timedelta
|
||||
|
||||
from accounting.locale import gettext
|
||||
from .description import get_desc
|
||||
from .parser import parse_spec
|
||||
from .specification import get_spec
|
||||
|
||||
|
||||
@ -101,33 +100,6 @@ class Period:
|
||||
and self.end == date(self.start.year, 12, 31)
|
||||
self.is_a_day = self.start == self.end
|
||||
|
||||
@classmethod
|
||||
def get_instance(cls, spec: str | None = None) -> t.Self:
|
||||
"""Returns a period instance.
|
||||
|
||||
:param spec: The period specification, or omit for the default.
|
||||
:return: The period instance.
|
||||
:raise ValueError: When the period is invalid.
|
||||
"""
|
||||
if spec is None:
|
||||
return ThisMonth()
|
||||
named_periods: dict[str, t.Type[t.Callable[[], Period]]] = {
|
||||
"this-month": lambda: ThisMonth(),
|
||||
"last-month": lambda: LastMonth(),
|
||||
"since-last-month": lambda: SinceLastMonth(),
|
||||
"this-year": lambda: ThisYear(),
|
||||
"last-year": lambda: LastYear(),
|
||||
"today": lambda: Today(),
|
||||
"yesterday": lambda: Yesterday(),
|
||||
"all-time": lambda: AllTime(),
|
||||
}
|
||||
if spec in named_periods:
|
||||
return named_periods[spec]()
|
||||
start, end = parse_spec(spec)
|
||||
if start is not None and end is not None and start > end:
|
||||
raise ValueError
|
||||
return cls(start, end)
|
||||
|
||||
def is_year(self, year: int) -> bool:
|
||||
"""Returns whether the period is the specific year period.
|
||||
|
||||
|
Reference in New Issue
Block a user