move
This commit is contained in:
parent
99e17d1e9c
commit
83c1580726
@ -17,6 +17,7 @@ from heapq import heappush, heappop
|
|||||||
import dateparser
|
import dateparser
|
||||||
import pytz
|
import pytz
|
||||||
from dateparser import parse as parse_dt
|
from dateparser import parse as parse_dt
|
||||||
|
from dateparser.search import search_dates
|
||||||
from dateparser.timezone_parser import StaticTzInfo
|
from dateparser.timezone_parser import StaticTzInfo
|
||||||
from datetimerange import DateTimeRange
|
from datetimerange import DateTimeRange
|
||||||
from dateutil.parser import parse as dutil_parse
|
from dateutil.parser import parse as dutil_parse
|
||||||
@ -37,6 +38,8 @@ DEFAULT_FORMAT = '%Y-%m-%d %H:%M:%S%z'
|
|||||||
|
|
||||||
basepath = os.path.dirname(os.path.abspath(__file__))
|
basepath = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
SKIP_DATE_TOKENS = ['on', 'to', 'set', 'be']
|
||||||
|
|
||||||
|
|
||||||
def parse_to_iso(dt):
|
def parse_to_iso(dt):
|
||||||
parsed_dt = dateparser.parse(dt)
|
parsed_dt = dateparser.parse(dt)
|
||||||
@ -44,6 +47,27 @@ def parse_to_iso(dt):
|
|||||||
return parsed_dt.strftime(ISO_FORMAT)
|
return parsed_dt.strftime(ISO_FORMAT)
|
||||||
|
|
||||||
|
|
||||||
|
def find_dates_in(text):
|
||||||
|
rv = []
|
||||||
|
dateparser_dates = search_dates(text, settings={"SKIP_TOKENS": SKIP_DATE_TOKENS})
|
||||||
|
if dateparser_dates:
|
||||||
|
rv += list(filter(_dateparser_search_filter, dateparser_dates))
|
||||||
|
try:
|
||||||
|
dateutil_dates = dutil_parse(text, fuzzy_with_tokens=True)
|
||||||
|
ignored_tokens = dateutil_dates[1]
|
||||||
|
text_analysed = ""
|
||||||
|
for ignored_token in ignored_tokens:
|
||||||
|
text_analysed += text.split(ignored_token)[0]
|
||||||
|
rv.append([text_analysed, dateutil_dates[0]])
|
||||||
|
except:
|
||||||
|
...
|
||||||
|
return rv
|
||||||
|
|
||||||
|
|
||||||
|
def _dateparser_search_filter(dt_raw):
|
||||||
|
return not (dt_raw[0].isdigit() or dt_raw[0] in SKIP_DATE_TOKENS)
|
||||||
|
|
||||||
|
|
||||||
class Location(object):
|
class Location(object):
|
||||||
"""
|
"""
|
||||||
Represents a location with name, latitude and longitude
|
Represents a location with name, latitude and longitude
|
||||||
@ -337,7 +361,7 @@ def resolve_timezone(query):
|
|||||||
def solve_query(human_dt, human_tz_loc=None):
|
def solve_query(human_dt, human_tz_loc=None):
|
||||||
try:
|
try:
|
||||||
# first try parsing the timezone from user input
|
# first try parsing the timezone from user input
|
||||||
result = dateparser.parse(human_dt, settings={'RETURN_AS_TIMEZONE_AWARE': True})
|
result = dateparser.parse(human_dt, settings={'RETURN_AS_TIMEZONE_AWARE': True, "TIMEZONE": "utc"})
|
||||||
logger.debug("human_dt result: {}".format(result))
|
logger.debug("human_dt result: {}".format(result))
|
||||||
if human_tz_loc:
|
if human_tz_loc:
|
||||||
human_tz_loc = resolve_timezone(human_tz_loc)["tz_name"]
|
human_tz_loc = resolve_timezone(human_tz_loc)["tz_name"]
|
||||||
@ -374,20 +398,8 @@ def main(args):
|
|||||||
print(formated_result)
|
print(formated_result)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
def time_ago(date=None, diff=None, min_resolution=None, max_resolution=None):
|
||||||
args = parse_args()
|
# TODO : create a min/max resolution
|
||||||
setup_logging_level(args.debug)
|
|
||||||
main(args)
|
|
||||||
|
|
||||||
|
|
||||||
def time_ago(date=None, diff=None):
|
|
||||||
"""
|
|
||||||
Get a datetime object, timedelta object or a int() Epoch timestamp and
|
|
||||||
return a
|
|
||||||
pretty string like 'an hour ago', 'Yesterday', '3 months ago',
|
|
||||||
'just now', etc
|
|
||||||
Modified from: http://stackoverflow.com/a/1551394/141084
|
|
||||||
"""
|
|
||||||
now = get_utcnow()
|
now = get_utcnow()
|
||||||
if not date:
|
if not date:
|
||||||
if diff:
|
if diff:
|
||||||
@ -397,8 +409,8 @@ def time_ago(date=None, diff=None):
|
|||||||
else:
|
else:
|
||||||
if type(date) is str:
|
if type(date) is str:
|
||||||
parsed_dt = parse_dt(date)
|
parsed_dt = parse_dt(date)
|
||||||
if parsed_dt.tzinfo is not None:
|
if parsed_dt.tzinfo is None:
|
||||||
now = get_utcnow(tzaware=True)
|
now = get_utcnow(tzaware=False)
|
||||||
diff = now - parsed_dt
|
diff = now - parsed_dt
|
||||||
elif type(date) is timedelta:
|
elif type(date) is timedelta:
|
||||||
diff = date
|
diff = date
|
||||||
@ -787,3 +799,9 @@ def td_iso8601(td):
|
|||||||
if rem[timeframe]:
|
if rem[timeframe]:
|
||||||
fmt += "{}{}".format(rem[timeframe], short)
|
fmt += "{}{}".format(rem[timeframe], short)
|
||||||
return fmt
|
return fmt
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
args = parse_args()
|
||||||
|
setup_logging_level(args.debug)
|
||||||
|
main(args)
|
@ -5,7 +5,7 @@ import os
|
|||||||
|
|
||||||
from fuzzywuzzy import fuzz
|
from fuzzywuzzy import fuzz
|
||||||
|
|
||||||
from tww.tww import basepath
|
from tww.lib import basepath
|
||||||
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
|
@ -9,8 +9,8 @@ from pygments import highlight, lexers, formatters
|
|||||||
from scalpl import Cut
|
from scalpl import Cut
|
||||||
|
|
||||||
from tww.localization import setlocale, resolve_locale
|
from tww.localization import setlocale, resolve_locale
|
||||||
from tww.tww import ISO_FORMAT, time_to_emoji, time_ago, workday_diff, workhours_diff, td_remainders, td_totals, td_iso8601
|
from tww.lib import ISO_FORMAT, time_to_emoji, time_ago, workday_diff, workhours_diff, td_remainders, td_totals, td_iso8601
|
||||||
from tww.tww import resolve_timezone, dateparser_parse_dt, get_utcnow, get_s_since_epoch, get_ms_since_epoch, \
|
from tww.lib import resolve_timezone, dateparser_parse_dt, get_utcnow, get_s_since_epoch, get_ms_since_epoch, \
|
||||||
dt_tz_translation, get_local_now, query_to_format_result
|
dt_tz_translation, get_local_now, query_to_format_result
|
||||||
from tww.common import logger
|
from tww.common import logger
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user