ACL uses enums, some more tests, other stuff.
[python_utils.git] / dateparse / dateparse_utils.py
index fc5408fb8cd9a252a2f21165aea960d0c3fe0a3e..05bee8dee7d95d4124192d0b6a2ee553f7d2a9f7 100755 (executable)
@@ -13,13 +13,15 @@ import dateutil.easter
 import dateutil.tz
 import pytz
 
+import acl
 import bootstrap
-import datetime_utils
-import decorator_utils
+from datetime_utils import (
+    TimeUnit, n_timeunits_from_base, datetime_to_date, date_to_datetime
+)
 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
-import simple_acl as acl
+from decorator_utils import decorate_matching_methods_with
 
 
 logger = logging.getLogger(__name__)
@@ -78,16 +80,18 @@ class RaisingErrorListener(antlr4.DiagnosticErrorListener):
         pass
 
 
-@decorator_utils.decorate_matching_methods_with(debug_parse,
-                                                acl=acl.StringWildcardBasedACL(
-                                                    allowed_patterns=[
-                                                        'enter*',
-                                                        'exit*',
-                                                    ],
-                                                    denied_patterns=None,
-                                                    order_to_check_allow_deny=acl.ACL_ORDER_DENY_ALLOW,
-                                                    default_answer=False
-                                                ))
+@decorate_matching_methods_with(
+    debug_parse,
+    acl=acl.StringWildcardBasedACL(
+        allowed_patterns=[
+            'enter*',
+            'exit*',
+        ],
+        denied_patterns=None,
+        order_to_check_allow_deny=acl.Order.DENY_ALLOW,
+        default_answer=False
+    )
+)
 class DateParser(dateparse_utilsListener):
     PARSE_TYPE_SINGLE_DATE_EXPR = 1
     PARSE_TYPE_BASE_AND_OFFSET_EXPR = 2
@@ -150,16 +154,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()
@@ -234,7 +238,7 @@ class DateParser(dateparse_utilsListener):
             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
@@ -256,10 +260,10 @@ class DateParser(dateparse_utilsListener):
         name = name.replace('washi', 'presi')
         return name
 
-    def _figure_out_date_unit(self, orig: str) -> int:
+    def _figure_out_date_unit(self, orig: str) -> TimeUnit:
         """Figure out what unit a date expression piece is talking about."""
         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])
@@ -498,12 +502,12 @@ 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?
@@ -544,11 +548,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()
@@ -639,12 +643,12 @@ class DateParser(dateparse_utilsListener):
                 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:
@@ -879,7 +883,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)
@@ -909,7 +913,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)
@@ -1044,6 +1048,7 @@ class DateParser(dateparse_utilsListener):
             pass
 
 
 def main() -> None:
     parser = DateParser()
     for line in sys.stdin:
@@ -1061,5 +1066,4 @@ def main() -> None:
 
 
 if __name__ == "__main__":
-    main = bootstrap.initialize(main)
     main()