X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=dateparse%2Fdateparse_utils.py;fp=dateparse%2Fdateparse_utils.py;h=ad92ccd5d8d3e672bc0adc55ff2197912a833455;hb=11eeb8574b7b4620ac6fd440cb251f8aa2458f5b;hp=00e7b9dbb393c4c40be60e0079e0b8377e071ea2;hpb=e516059c716537259c601c022cc3bad44025385e;p=python_utils.git diff --git a/dateparse/dateparse_utils.py b/dateparse/dateparse_utils.py index 00e7b9d..ad92ccd 100755 --- a/dateparse/dateparse_utils.py +++ b/dateparse/dateparse_utils.py @@ -15,8 +15,7 @@ import pytz 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 @@ -78,7 +77,7 @@ class RaisingErrorListener(antlr4.DiagnosticErrorListener): pass -@decorator_utils.decorate_matching_methods_with( +@decorate_matching_methods_with( debug_parse, acl=acl.StringWildcardBasedACL( allowed_patterns=[ @@ -106,6 +105,7 @@ class DateParser(dateparse_utilsListener): 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, @@ -152,16 +152,16 @@ class DateParser(dateparse_utilsListener): # 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() @@ -231,12 +231,13 @@ class DateParser(dateparse_utilsListener): 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 @@ -260,8 +261,9 @@ class DateParser(dateparse_utilsListener): 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]) @@ -467,6 +469,9 @@ class DateParser(dateparse_utilsListener): 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: @@ -500,15 +505,16 @@ class DateParser(dateparse_utilsListener): 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'], @@ -546,11 +552,11 @@ class DateParser(dateparse_utilsListener): 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() @@ -635,18 +641,19 @@ class DateParser(dateparse_utilsListener): 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: @@ -867,6 +874,7 @@ class DateParser(dateparse_utilsListener): 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()) @@ -881,7 +889,7 @@ class DateParser(dateparse_utilsListener): count = -count unit = self._figure_out_date_unit(unit) - d = datetime_utils.n_timeunits_from_base( + d = n_timeunits_from_base( count, unit, d) @@ -892,6 +900,7 @@ class DateParser(dateparse_utilsListener): def exitDeltaRelativeToTodayExpr( self, ctx: dateparse_utilsParser.DeltaRelativeToTodayExprContext ) -> None: + from datetime_utils import n_timeunits_from_base d = self.now_datetime try: mod = ctx.thisNextLast() @@ -911,7 +920,7 @@ class DateParser(dateparse_utilsListener): 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)