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:
parent
4432484acd
commit
bc792c145f
@ -23,7 +23,7 @@ from flask import abort
|
|||||||
from werkzeug.routing import BaseConverter
|
from werkzeug.routing import BaseConverter
|
||||||
|
|
||||||
from accounting.models import Account
|
from accounting.models import Account
|
||||||
from accounting.report.period import Period
|
from .period import Period, get_period
|
||||||
from .utils.income_expense_account import IncomeExpensesAccount
|
from .utils.income_expense_account import IncomeExpensesAccount
|
||||||
|
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ class PeriodConverter(BaseConverter):
|
|||||||
:return: The corresponding period.
|
:return: The corresponding period.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
return Period.get_instance(value)
|
return get_period(value)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
|
@ -18,4 +18,5 @@
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
from .chooser import PeriodChooser
|
from .chooser import PeriodChooser
|
||||||
|
from .parser import get_period
|
||||||
from .period import Period
|
from .period import Period
|
||||||
|
@ -20,12 +20,43 @@
|
|||||||
import calendar
|
import calendar
|
||||||
import re
|
import re
|
||||||
from datetime import date
|
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}))?)?"
|
DATE_SPEC_RE: str = r"(\d{4})(?:-(\d{2})(?:-(\d{2}))?)?"
|
||||||
"""The regular expression of a date specification."""
|
"""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.
|
"""Parses the period specification.
|
||||||
|
|
||||||
:param text: The period specification.
|
:param text: The period specification.
|
||||||
|
@ -26,7 +26,6 @@ from datetime import date, timedelta
|
|||||||
|
|
||||||
from accounting.locale import gettext
|
from accounting.locale import gettext
|
||||||
from .description import get_desc
|
from .description import get_desc
|
||||||
from .parser import parse_spec
|
|
||||||
from .specification import get_spec
|
from .specification import get_spec
|
||||||
|
|
||||||
|
|
||||||
@ -101,33 +100,6 @@ class Period:
|
|||||||
and self.end == date(self.start.year, 12, 31)
|
and self.end == date(self.start.year, 12, 31)
|
||||||
self.is_a_day = self.start == self.end
|
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:
|
def is_year(self, year: int) -> bool:
|
||||||
"""Returns whether the period is the specific year period.
|
"""Returns whether the period is the specific year period.
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ from flask_babel import LazyString
|
|||||||
from accounting import db
|
from accounting import db
|
||||||
from accounting.locale import gettext
|
from accounting.locale import gettext
|
||||||
from accounting.models import Currency, Account
|
from accounting.models import Currency, Account
|
||||||
from accounting.report.period import Period
|
from accounting.report.period import Period, get_period
|
||||||
from accounting.template_globals import default_currency_code
|
from accounting.template_globals import default_currency_code
|
||||||
from .income_expense_account import IncomeExpensesAccount
|
from .income_expense_account import IncomeExpensesAccount
|
||||||
from .option_link import OptionLink
|
from .option_link import OptionLink
|
||||||
@ -53,8 +53,7 @@ class ReportChooser:
|
|||||||
"""
|
"""
|
||||||
self.__active_report: ReportType = active_report
|
self.__active_report: ReportType = active_report
|
||||||
"""The currently active report."""
|
"""The currently active report."""
|
||||||
self.__period: Period = Period.get_instance() if period is None \
|
self.__period: Period = get_period() if period is None else period
|
||||||
else period
|
|
||||||
"""The period."""
|
"""The period."""
|
||||||
self.__currency: Currency = db.session.get(
|
self.__currency: Currency = db.session.get(
|
||||||
Currency, default_currency_code()) \
|
Currency, default_currency_code()) \
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
from flask import Blueprint, request, Response
|
from flask import Blueprint, request, Response
|
||||||
|
|
||||||
from accounting.models import Currency, Account
|
from accounting.models import Currency, Account
|
||||||
from accounting.report.period import Period
|
from accounting.report.period import Period, get_period
|
||||||
from accounting.utils.permission import has_permission, can_view
|
from accounting.utils.permission import has_permission, can_view
|
||||||
from .reports import Journal, Ledger, IncomeExpenses, TrialBalance, \
|
from .reports import Journal, Ledger, IncomeExpenses, TrialBalance, \
|
||||||
IncomeStatement, BalanceSheet, Search
|
IncomeStatement, BalanceSheet, Search
|
||||||
@ -39,7 +39,7 @@ def get_default_journal_list() -> str | Response:
|
|||||||
|
|
||||||
:return: The journal in the default period.
|
:return: The journal in the default period.
|
||||||
"""
|
"""
|
||||||
return __get_journal_list(Period.get_instance())
|
return __get_journal_list(get_period())
|
||||||
|
|
||||||
|
|
||||||
@bp.get("journal/<period:period>", endpoint="journal")
|
@bp.get("journal/<period:period>", endpoint="journal")
|
||||||
@ -76,7 +76,7 @@ def get_default_ledger_list(currency: Currency, account: Account) \
|
|||||||
:param account: The account.
|
:param account: The account.
|
||||||
:return: The ledger in the default period.
|
:return: The ledger in the default period.
|
||||||
"""
|
"""
|
||||||
return __get_ledger_list(currency, account, Period.get_instance())
|
return __get_ledger_list(currency, account, get_period())
|
||||||
|
|
||||||
|
|
||||||
@bp.get("ledger/<currency:currency>/<account:account>/<period:period>",
|
@bp.get("ledger/<currency:currency>/<account:account>/<period:period>",
|
||||||
@ -121,7 +121,7 @@ def get_default_income_expenses_list(currency: Currency,
|
|||||||
:param account: The account.
|
:param account: The account.
|
||||||
:return: The income and expenses log in the default period.
|
:return: The income and expenses log in the default period.
|
||||||
"""
|
"""
|
||||||
return __get_income_expenses_list(currency, account, Period.get_instance())
|
return __get_income_expenses_list(currency, account, get_period())
|
||||||
|
|
||||||
|
|
||||||
@bp.get(
|
@bp.get(
|
||||||
@ -166,7 +166,7 @@ def get_default_trial_balance_list(currency: Currency) -> str | Response:
|
|||||||
:param currency: The currency.
|
:param currency: The currency.
|
||||||
:return: The trial balance in the default period.
|
:return: The trial balance in the default period.
|
||||||
"""
|
"""
|
||||||
return __get_trial_balance_list(currency, Period.get_instance())
|
return __get_trial_balance_list(currency, get_period())
|
||||||
|
|
||||||
|
|
||||||
@bp.get("trial-balance/<currency:currency>/<period:period>",
|
@bp.get("trial-balance/<currency:currency>/<period:period>",
|
||||||
@ -206,7 +206,7 @@ def get_default_income_statement_list(currency: Currency) -> str | Response:
|
|||||||
:param currency: The currency.
|
:param currency: The currency.
|
||||||
:return: The income statement in the default period.
|
:return: The income statement in the default period.
|
||||||
"""
|
"""
|
||||||
return __get_income_statement_list(currency, Period.get_instance())
|
return __get_income_statement_list(currency, get_period())
|
||||||
|
|
||||||
|
|
||||||
@bp.get("income-statement/<currency:currency>/<period:period>",
|
@bp.get("income-statement/<currency:currency>/<period:period>",
|
||||||
@ -246,7 +246,7 @@ def get_default_balance_sheet_list(currency: Currency) -> str | Response:
|
|||||||
:param currency: The currency.
|
:param currency: The currency.
|
||||||
:return: The balance sheet in the default period.
|
:return: The balance sheet in the default period.
|
||||||
"""
|
"""
|
||||||
return __get_balance_sheet_list(currency, Period.get_instance())
|
return __get_balance_sheet_list(currency, get_period())
|
||||||
|
|
||||||
|
|
||||||
@bp.get("balance-sheet/<currency:currency>/<period:period>",
|
@bp.get("balance-sheet/<currency:currency>/<period:period>",
|
||||||
|
Loading…
Reference in New Issue
Block a user