projects
/
python_utils.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
More cleanup, yey!
[python_utils.git]
/
dateparse
/
dateparse_utils.py
diff --git
a/dateparse/dateparse_utils.py
b/dateparse/dateparse_utils.py
index be5e1b5312a7beb83fea7dc7b0137f08059879a3..79ce8a3d749046e3e4d61fb07300ca72ce317f3f 100755
(executable)
--- a/
dateparse/dateparse_utils.py
+++ b/
dateparse/dateparse_utils.py
@@
-1,4
+1,5
@@
#!/usr/bin/env python3
#!/usr/bin/env python3
+# type: ignore
"""
Parse dates in a variety of formats.
"""
Parse dates in a variety of formats.
@@
-7,7
+8,6
@@
Parse dates in a variety of formats.
import datetime
import functools
import datetime
import functools
-import holidays # type: ignore
import logging
import re
import sys
import logging
import re
import sys
@@
-16,21
+16,16
@@
from typing import Any, Callable, Dict, Optional
import antlr4 # type: ignore
import dateutil.easter
import dateutil.tz
import antlr4 # type: ignore
import dateutil.easter
import dateutil.tz
+import holidays # type: ignore
import pytz
import acl
import bootstrap
import pytz
import acl
import bootstrap
-from datetime_utils import (
- TimeUnit,
- n_timeunits_from_base,
- datetime_to_date,
- date_to_datetime,
-)
+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 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
-
+from datetime_utils import TimeUnit, date_to_datetime, datetime_to_date, n_timeunits_from_base
logger = logging.getLogger(__name__)
logger = logging.getLogger(__name__)
@@
-66,9
+61,7
@@
class RaisingErrorListener(antlr4.DiagnosticErrorListener):
def syntaxError(self, recognizer, offendingSymbol, line, column, msg, e):
raise ParseException(msg)
def syntaxError(self, recognizer, offendingSymbol, line, column, msg, e):
raise ParseException(msg)
- def reportAmbiguity(
- self, recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs
- ):
+ def reportAmbiguity(self, recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs):
pass
def reportAttemptingFullContext(
pass
def reportAttemptingFullContext(
@@
-76,9
+69,7
@@
class RaisingErrorListener(antlr4.DiagnosticErrorListener):
):
pass
):
pass
- def reportContextSensitivity(
- self, recognizer, dfa, startIndex, stopIndex, prediction, configs
- ):
+ def reportContextSensitivity(self, recognizer, dfa, startIndex, stopIndex, prediction, configs):
pass
pass
@@
-225,8
+216,9
@@
class DateParser(dateparse_utilsListener):
to timezone naive (i.e. tzinfo = None).
"""
dt = self.datetime
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 --
return dt
# -- helpers --
@@
-376,25
+368,25
@@
class DateParser(dateparse_utilsListener):
# Try pytz
try:
# Try pytz
try:
- tz = pytz.timezone(txt)
- if tz is not None:
- return tz
+ tz
1
= pytz.timezone(txt)
+ if tz
1
is not None:
+ return tz
1
except Exception:
pass
# Try dateutil
try:
except Exception:
pass
# Try dateutil
try:
- tz = dateutil.tz.gettz(txt)
- if tz is not None:
- return tz
+ tz
2
= dateutil.tz.gettz(txt)
+ if tz
2
is not None:
+ return tz
2
except Exception:
pass
# Try constructing an offset in seconds
try:
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)
hour = int(txt[1:3])
minute = int(txt[-2:])
offset = sign * (hour * 60 * 60) + sign * (minute * 60)
@@
-435,12
+427,20
@@
class DateParser(dateparse_utilsListener):
micros = self.time.microsecond
self.datetime = datetime.datetime(
micros = self.time.microsecond
self.datetime = datetime.datetime(
- year, month, day, hour, minute, second, micros, tzinfo=self.time.tzinfo
+ year,
+ month,
+ day,
+ hour,
+ minute,
+ second,
+ micros,
+ tzinfo=self.time.tzinfo,
)
# Apply resudual adjustments to times here when we have a
# datetime.
self.datetime = self.datetime + self.timedelta
)
# 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,
self.time = datetime.time(
self.datetime.hour,
self.datetime.minute,
@@
-547,11
+547,9
@@
class DateParser(dateparse_utilsListener):
elif unit == TimeUnit.HOURS:
self.timedelta = datetime.timedelta(hours=count)
else:
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
- ) -> None:
+ def exitDeltaPlusMinusExpr(self, ctx: dateparse_utilsParser.DeltaPlusMinusExprContext) -> None:
try:
n = ctx.nth()
if n is None:
try:
n = ctx.nth()
if n is None:
@@
-573,17
+571,13
@@
class DateParser(dateparse_utilsListener):
else:
self.context['delta_unit'] = unit
else:
self.context['delta_unit'] = unit
- def exitDeltaNextLast(
- self, ctx: dateparse_utilsParser.DeltaNextLastContext
- ) -> None:
+ def exitDeltaNextLast(self, ctx: dateparse_utilsParser.DeltaNextLastContext) -> None:
try:
txt = ctx.getText().lower()
except Exception:
raise ParseException(f'Bad next/last: {ctx.getText()}')
if 'month' in self.context or 'day' in self.context or 'year' in self.context:
try:
txt = ctx.getText().lower()
except Exception:
raise ParseException(f'Bad next/last: {ctx.getText()}')
if 'month' in self.context or 'day' in self.context or 'year' in self.context:
- raise ParseException(
- 'Next/last expression expected to be relative to today.'
- )
+ raise ParseException('Next/last expression expected to be relative to today.')
if txt[:4] == 'next':
self.context['delta_int'] = +1
self.context['day'] = self.now_datetime.day
if txt[:4] == 'next':
self.context['delta_int'] = +1
self.context['day'] = self.now_datetime.day
@@
-612,9
+606,7
@@
class DateParser(dateparse_utilsListener):
if 'time_delta_before_after' not in self.context:
raise ParseException(f'Bad Before/After: {ctx.getText()}')
if 'time_delta_before_after' not in self.context:
raise ParseException(f'Bad Before/After: {ctx.getText()}')
- def exitDeltaTimeFraction(
- self, ctx: dateparse_utilsParser.DeltaTimeFractionContext
- ) -> None:
+ def exitDeltaTimeFraction(self, ctx: dateparse_utilsParser.DeltaTimeFractionContext) -> None:
try:
txt = ctx.getText().lower()[:4]
if txt == 'quar':
try:
txt = ctx.getText().lower()[:4]
if txt == 'quar':
@@
-628,9
+620,7
@@
class DateParser(dateparse_utilsListener):
except Exception:
raise ParseException(f'Bad time fraction {ctx.getText()}')
except Exception:
raise ParseException(f'Bad time fraction {ctx.getText()}')
- def exitDeltaBeforeAfter(
- self, ctx: dateparse_utilsParser.DeltaBeforeAfterContext
- ) -> None:
+ def exitDeltaBeforeAfter(self, ctx: dateparse_utilsParser.DeltaBeforeAfterContext) -> None:
try:
txt = ctx.getText().lower()
except Exception:
try:
txt = ctx.getText().lower()
except Exception:
@@
-638,9
+628,7
@@
class DateParser(dateparse_utilsListener):
else:
self.context['delta_before_after'] = txt
else:
self.context['delta_before_after'] = txt
- def exitDeltaTimeBeforeAfter(
- self, ctx: dateparse_utilsParser.DeltaBeforeAfterContext
- ) -> None:
+ def exitDeltaTimeBeforeAfter(self, ctx: dateparse_utilsParser.DeltaBeforeAfterContext) -> None:
try:
txt = ctx.getText().lower()
except Exception:
try:
txt = ctx.getText().lower()
except Exception:
@@
-802,9
+790,7
@@
class DateParser(dateparse_utilsListener):
special = ctx.specialDate().getText().lower()
self.context['special'] = special
except Exception:
special = ctx.specialDate().getText().lower()
self.context['special'] = special
except Exception:
- raise ParseException(
- f'Bad specialDate expression: {ctx.specialDate().getText()}'
- )
+ raise ParseException(f'Bad specialDate expression: {ctx.specialDate().getText()}')
try:
mod = ctx.thisNextLast()
if mod is not None:
try:
mod = ctx.thisNextLast()
if mod is not None:
@@
-888,9
+874,7
@@
class DateParser(dateparse_utilsListener):
self.context['month'] = d.month
self.context['day'] = d.day
self.context['month'] = d.month
self.context['day'] = d.day
- def exitSpecialTimeExpr(
- self, ctx: dateparse_utilsParser.SpecialTimeExprContext
- ) -> None:
+ def exitSpecialTimeExpr(self, ctx: dateparse_utilsParser.SpecialTimeExprContext) -> None:
try:
txt = ctx.specialTime().getText().lower()
except Exception:
try:
txt = ctx.specialTime().getText().lower()
except Exception:
@@
-915,9
+899,7
@@
class DateParser(dateparse_utilsListener):
except Exception:
pass
except Exception:
pass
- def exitTwelveHourTimeExpr(
- self, ctx: dateparse_utilsParser.TwelveHourTimeExprContext
- ) -> None:
+ def exitTwelveHourTimeExpr(self, ctx: dateparse_utilsParser.TwelveHourTimeExprContext) -> None:
try:
hour = ctx.hour().getText()
while not hour[-1].isdigit():
try:
hour = ctx.hour().getText()
while not hour[-1].isdigit():
@@
-1027,6
+1009,7
@@
def main() -> None:
logger.exception(e)
print("Unrecognized.")
else:
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)
print(dt.strftime('%A %Y/%m/%d %H:%M:%S.%f %Z(%z)'))
sys.exit(0)