fix tokenizer

This commit is contained in:
Daniel Tsvetkov 2020-02-07 16:17:28 +01:00
parent ff03e93840
commit 559bd39e9a
2 changed files with 26 additions and 10 deletions

View File

@ -1,6 +1,7 @@
import re import re
import sys import sys
from datetime import timedelta, datetime from datetime import timedelta, datetime
from pprint import pprint, pformat
from tww import resolve_timezone, dateparser_parse_dt, get_utcnow, get_s_since_epoch, get_ms_since_epoch, \ from tww import resolve_timezone, dateparser_parse_dt, get_utcnow, get_s_since_epoch, get_ms_since_epoch, \
dt_tz_translation, DEFAULT_FORMAT, get_local_now dt_tz_translation, DEFAULT_FORMAT, get_local_now
@ -42,24 +43,34 @@ def handler_time_ms_now_utc() -> int:
return get_ms_since_epoch(get_utcnow()) return get_ms_since_epoch(get_utcnow())
def handler_time_diff(start_dt: str, end_dt: str) -> timedelta: def handler_time_diff(start_dt: str, end_dt: str) -> dict:
return dateparser_parse_dt(end_dt) - dateparser_parse_dt(start_dt) start, end = dateparser_parse_dt(start_dt), dateparser_parse_dt(end_dt)
return dict(start=start.strftime(DEFAULT_FORMAT),
end=end.strftime(DEFAULT_FORMAT),
diff=end - start)
def handler_time_since(start_dt_s: str) -> timedelta: def handler_time_since(start_dt_s: str) -> dict:
return handler_time_diff(start_dt_s, str(get_utcnow())) return handler_time_diff(start_dt_s, str(get_utcnow()))
def handler_time_until(end_dt_s: str) -> timedelta: def handler_time_until(end_dt_s: str) -> dict:
return handler_time_diff(str(get_utcnow()), end_dt_s) return handler_time_diff(str(get_utcnow()), end_dt_s)
def handler_timezone_translation(dt_s: str, timezone_like_s: str) -> datetime: def handler_timezone_translation(dt_s: str, timezone_like_s: str) -> dict:
dt = dateparser_parse_dt(dt_s) dt = dateparser_parse_dt(dt_s)
tz = resolve_timezone(timezone_like_s) tz = resolve_timezone(timezone_like_s)
if tz: if not tz:
tz, offset, the_time = '', '', dt
else:
offset = tz.get('tz_offset') offset = tz.get('tz_offset')
return dt_tz_translation(dt, offset) translation = dt_tz_translation(dt, offset)
the_time = translation.strftime(DEFAULT_FORMAT)
return dict(dt=the_time,
offset=offset,
tz=tz,
)
def handler_generic_parser(dt_s: str) -> datetime: def handler_generic_parser(dt_s: str) -> datetime:
@ -132,13 +143,15 @@ def test():
if __name__ == "__main__": if __name__ == "__main__":
query = ' '.join(sys.argv[1:]) query = "2020-02-07 11:25:58+0000 in seconds" #' '.join(sys.argv[1:])
results = parse(query) results = parse(query)
for handler, result in results: for handler, result in results:
if type(result) is datetime: if type(result) is datetime:
print(" {} -> {}".format(handler, result.strftime(DEFAULT_FORMAT))) print(" {} -> {}".format(handler, result.strftime(DEFAULT_FORMAT)))
elif type(result) is timedelta: elif type(result) is timedelta:
print(" {} -> {}".format(handler, result)) print(" {} -> {}".format(handler, result))
elif type(result) is dict:
print(" {} -> {}".format(handler, pformat(result)))
elif type(result) is None: elif type(result) is None:
print(" {} -> Couldn't solve query".format(handler)) print(" {} -> Couldn't solve query".format(handler))
else: else:

View File

@ -439,7 +439,7 @@ def query_to_dt(query):
def tzinfo_from_offset(offset: str) -> pytz.timezone: def tzinfo_from_offset(offset: str) -> pytz.timezone:
if ':' in offset: if ':' in offset:
offset = ''.join(offset.split(':')) offset = ''.join(offset.split(':'))
tznames = TZ_OFFSETS.get(offset, ["utc"]) tznames = TZ_OFFSETS.get(offset, [])
for tzname in tznames: for tzname in tznames:
if tzname.startswith('Etc/GMT'): if tzname.startswith('Etc/GMT'):
return pytz.timezone(tzname) return pytz.timezone(tzname)
@ -515,7 +515,10 @@ def get_dt_tz_offset(dt: datetime) -> timedelta:
if type(dt.tzinfo) is StaticTzInfo: if type(dt.tzinfo) is StaticTzInfo:
tzoffset = dt.tzinfo._StaticTzInfo__offset tzoffset = dt.tzinfo._StaticTzInfo__offset
else: else:
tzoffset = dt.tzinfo._utcoffset try:
tzoffset = dt.tzinfo._utcoffset
except Exception as e:
return dt.tzinfo.utcoffset(dt)
return tzoffset return tzoffset
return timedelta(0) return timedelta(0)