X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=dateparse%2Fdateparse_utils.py;h=bf1f10abb0e483a1998bd1035f9e50f9a6eef004;hb=7ff2af6fe7bffea90dc4a31c93140c189917c659;hp=be5e1b5312a7beb83fea7dc7b0137f08059879a3;hpb=e70297b7e29a07457d6c7195425e734a1290abeb;p=python_utils.git diff --git a/dateparse/dateparse_utils.py b/dateparse/dateparse_utils.py index be5e1b5..bf1f10a 100755 --- a/dateparse/dateparse_utils.py +++ b/dateparse/dateparse_utils.py @@ -7,7 +7,6 @@ Parse dates in a variety of formats. import datetime import functools -import holidays # type: ignore import logging import re import sys @@ -16,21 +15,21 @@ from typing import Any, Callable, Dict, Optional import antlr4 # type: ignore import dateutil.easter import dateutil.tz +import holidays # type: ignore import pytz import acl import bootstrap +import decorator_utils +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 from datetime_utils import ( TimeUnit, - n_timeunits_from_base, - datetime_to_date, date_to_datetime, + datetime_to_date, + n_timeunits_from_base, ) -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 decorator_utils - logger = logging.getLogger(__name__) @@ -225,8 +224,9 @@ class DateParser(dateparse_utilsListener): to timezone naive (i.e. tzinfo = None). """ dt = self.datetime - if tz is not None: - dt = dt.replace(tzinfo=None).astimezone(tz=tz) + if dt is not None: + if tz is not None: + dt = dt.replace(tzinfo=None).astimezone(tz=tz) return dt # -- helpers -- @@ -376,25 +376,25 @@ class DateParser(dateparse_utilsListener): # Try pytz try: - tz = pytz.timezone(txt) - if tz is not None: - return tz + tz1 = pytz.timezone(txt) + if tz1 is not None: + return tz1 except Exception: pass # Try dateutil try: - tz = dateutil.tz.gettz(txt) - if tz is not None: - return tz + tz2 = dateutil.tz.gettz(txt) + if tz2 is not None: + return tz2 except Exception: pass # Try constructing an offset in seconds try: - sign = txt[0] - if sign == '-' or sign == '+': - sign = +1 if sign == '+' else -1 + txt_sign = txt[0] + if txt_sign == '-' or txt_sign == '+': + sign = +1 if txt_sign == '+' else -1 hour = int(txt[1:3]) minute = int(txt[-2:]) offset = sign * (hour * 60 * 60) + sign * (minute * 60) @@ -441,6 +441,7 @@ class DateParser(dateparse_utilsListener): # Apply resudual adjustments to times here when we have a # datetime. self.datetime = self.datetime + self.timedelta + assert self.datetime is not None self.time = datetime.time( self.datetime.hour, self.datetime.minute, @@ -547,7 +548,7 @@ class DateParser(dateparse_utilsListener): elif unit == TimeUnit.HOURS: self.timedelta = datetime.timedelta(hours=count) else: - raise ParseException() + raise ParseException(f'Invalid Unit: "{unit}"') def exitDeltaPlusMinusExpr( self, ctx: dateparse_utilsParser.DeltaPlusMinusExprContext @@ -1027,6 +1028,7 @@ def main() -> None: logger.exception(e) print("Unrecognized.") else: + assert dt is not None print(dt.strftime('%A %Y/%m/%d %H:%M:%S.%f %Z(%z)')) sys.exit(0)