import acl
import bootstrap
-import datetime_utils
-import decorator_utils
+from decorator_utils import decorate_matching_methods_with
from dateparse.dateparse_utilsLexer import dateparse_utilsLexer # type: ignore
from dateparse.dateparse_utilsListener import dateparse_utilsListener # type: ignore
from dateparse.dateparse_utilsParser import dateparse_utilsParser # type: ignore
pass
-@decorator_utils.decorate_matching_methods_with(
+@decorate_matching_methods_with(
debug_parse,
acl=acl.StringWildcardBasedACL(
allowed_patterns=[
idea of "now" so that the code can be more easily unittested.
Leave as None for real use cases.
"""
+ from datetime_utils import TimeUnit
self.month_name_to_number = {
'jan': 1,
'feb': 2,
# These TimeUnits are defined in datetime_utils and are used as params
# to datetime_utils.n_timeunits_from_base.
self.time_delta_unit_to_constant = {
- 'hou': datetime_utils.TimeUnit.HOURS,
- 'min': datetime_utils.TimeUnit.MINUTES,
- 'sec': datetime_utils.TimeUnit.SECONDS,
+ 'hou': TimeUnit.HOURS,
+ 'min': TimeUnit.MINUTES,
+ 'sec': TimeUnit.SECONDS,
}
self.delta_unit_to_constant = {
- 'day': datetime_utils.TimeUnit.DAYS,
- 'wor': datetime_utils.TimeUnit.WORKDAYS,
- 'wee': datetime_utils.TimeUnit.WEEKS,
- 'mon': datetime_utils.TimeUnit.MONTHS,
- 'yea': datetime_utils.TimeUnit.YEARS,
+ 'day': TimeUnit.DAYS,
+ 'wor': TimeUnit.WORKDAYS,
+ 'wee': TimeUnit.WEEKS,
+ 'mon': TimeUnit.MONTHS,
+ 'yea': TimeUnit.YEARS,
}
self.override_now_for_test_purposes = override_now_for_test_purposes
self._reset()
def _reset(self):
"""Reset at init and between parses."""
+ from datetime_utils import datetime_to_date
if self.override_now_for_test_purposes is None:
self.now_datetime = datetime.datetime.now()
self.today = datetime.date.today()
else:
self.now_datetime = self.override_now_for_test_purposes
- self.today = datetime_utils.datetime_to_date(
+ self.today = datetime_to_date(
self.override_now_for_test_purposes
)
self.date: Optional[datetime.date] = None
def _figure_out_date_unit(self, orig: str) -> int:
"""Figure out what unit a date expression piece is talking about."""
+ from datetime_utils import TimeUnit
if 'month' in orig:
- return datetime_utils.TimeUnit.MONTHS
+ return TimeUnit.MONTHS
txt = orig.lower()[:3]
if txt in self.day_name_to_number:
return(self.day_name_to_number[txt])
def exitDateExpr(self, ctx: dateparse_utilsParser.DateExprContext) -> None:
"""When we leave the date expression, populate self.date."""
+ from datetime_utils import (
+ n_timeunits_from_base, datetime_to_date, date_to_datetime
+ )
if 'special' in self.context:
self.date = self._parse_special_date(self.context['special'])
else:
if 'delta_unit' not in self.context:
raise ParseException('Missing delta_unit?!')
unit = self.context['delta_unit']
- dt = datetime_utils.n_timeunits_from_base(
+ dt = n_timeunits_from_base(
count,
unit,
- datetime_utils.date_to_datetime(self.date)
+ date_to_datetime(self.date)
)
- self.date = datetime_utils.datetime_to_date(dt)
+ self.date = datetime_to_date(dt)
def exitTimeExpr(self, ctx: dateparse_utilsParser.TimeExprContext) -> None:
# Simple time?
+ from datetime_utils import TimeUnit
self.time = datetime.time(
self.context['hour'],
self.context['minute'],
self.timedelta += datetime.timedelta(minutes=count)
else:
unit = self.context['time_delta_unit']
- if unit == datetime_utils.TimeUnit.SECONDS:
+ if unit == TimeUnit.SECONDS:
self.timedelta += datetime.timedelta(seconds=count)
- elif unit == datetime_utils.TimeUnit.MINUTES:
+ elif unit == TimeUnit.MINUTES:
self.timedelta = datetime.timedelta(minutes=count)
- elif unit == datetime_utils.TimeUnit.HOURS:
+ elif unit == TimeUnit.HOURS:
self.timedelta = datetime.timedelta(hours=count)
else:
raise ParseException()
def exitDeltaTimeFraction(
self, ctx: dateparse_utilsParser.DeltaTimeFractionContext
) -> None:
+ from datetime_utils import TimeUnit
try:
txt = ctx.getText().lower()[:4]
if txt == 'quar':
self.context['time_delta_int'] = 15
self.context[
'time_delta_unit'
- ] = datetime_utils.TimeUnit.MINUTES
+ ] = TimeUnit.MINUTES
elif txt == 'half':
self.context['time_delta_int'] = 30
self.context[
'time_delta_unit'
- ] = datetime_utils.TimeUnit.MINUTES
+ ] = TimeUnit.MINUTES
else:
raise ParseException(f'Bad time fraction {ctx.getText()}')
except:
def exitNFoosFromTodayAgoExpr(
self, ctx: dateparse_utilsParser.NFoosFromTodayAgoExprContext
) -> None:
+ from datetime_utils import n_timeunits_from_base
d = self.now_datetime
try:
count = self._get_int(ctx.unsignedInt().getText())
count = -count
unit = self._figure_out_date_unit(unit)
- d = datetime_utils.n_timeunits_from_base(
+ d = n_timeunits_from_base(
count,
unit,
d)
def exitDeltaRelativeToTodayExpr(
self, ctx: dateparse_utilsParser.DeltaRelativeToTodayExprContext
) -> None:
+ from datetime_utils import n_timeunits_from_base
d = self.now_datetime
try:
mod = ctx.thisNextLast()
f'Bad DeltaRelativeToTodayExpr: {ctx.getText()}'
)
unit = self._figure_out_date_unit(unit)
- d = datetime_utils.n_timeunits_from_base(
+ d = n_timeunits_from_base(
count,
unit,
d)