fix some future parsing

This commit is contained in:
Daniel Tsvetkov 2020-02-12 14:38:54 +01:00
parent 7a434b9422
commit d150f610ec
2 changed files with 15 additions and 16 deletions

View File

@ -26,14 +26,14 @@ r_time_in = re.compile('(?:time)?\s*in\s*(.*)', flags=re.IGNORECASE)
r_time_since = re.compile('(?:time)?\s*since\s*(.*)', flags=re.IGNORECASE) r_time_since = re.compile('(?:time)?\s*since\s*(.*)', flags=re.IGNORECASE)
r_time_until = re.compile('(?:time)?\s*until\s*(.*)', flags=re.IGNORECASE) r_time_until = re.compile('(?:time)?\s*until\s*(.*)', flags=re.IGNORECASE)
r_time_between = re.compile('(?:time)?\s*between\s*(.*)\s*and\s*(.*)', flags=re.IGNORECASE) r_time_between = re.compile('(?:time)?\s*between\s*(.*)\s*and\s*(.*)', flags=re.IGNORECASE)
r_workdays_since = re.compile('(?:workdays|work days)?\s*since\s*(.*)', flags=re.IGNORECASE) r_workdays_since = re.compile('(?:workdays|work days)\s*since\s*(.*)', flags=re.IGNORECASE)
r_workdays_until = re.compile('(?:workdays|work days)?\s*until\s*(.*)', flags=re.IGNORECASE) r_workdays_until = re.compile('(?:workdays|work days)\s*until\s*(.*)', flags=re.IGNORECASE)
r_workdays_between = re.compile('(?:workdays|work days)?\s*between\s*(.*)\s*and\s*(.*)', flags=re.IGNORECASE) r_workdays_between = re.compile('(?:workdays|work days)\s*between\s*(.*)\s*and\s*(.*)', flags=re.IGNORECASE)
r_workhours_since = re.compile('(?:workhours|work hours)?\s*since\s*(.*)', flags=re.IGNORECASE) r_workhours_since = re.compile('(?:workhours|work hours)\s*since\s*(.*)', flags=re.IGNORECASE)
r_workhours_until = re.compile('(?:workhours|work hours)?\s*until\s*(.*)', flags=re.IGNORECASE) r_workhours_until = re.compile('(?:workhours|work hours)\s*until\s*(.*)', flags=re.IGNORECASE)
r_workhours_between = re.compile('(?:workhours|work hours)?\s*between\s*(.*)\s*and\s*(.*)', flags=re.IGNORECASE) r_workhours_between = re.compile('(?:workhours|work hours)\s*between\s*(.*)\s*and\s*(.*)', flags=re.IGNORECASE)
r_timezone_translation = re.compile('(.*)?\s(?:in|to)\s(.*)', flags=re.IGNORECASE) r_timezone_translation = re.compile('(.*)?\s(?:in|to)\s(.*)', flags=re.IGNORECASE)
r_timezone = re.compile('(.*)?\s(?:timezone|timezones|tz)', flags=re.IGNORECASE) r_timezone = re.compile('(.*)\s(?:timezone|timezones|tz)', flags=re.IGNORECASE)
r_timezone_2 = re.compile('(?:timezone in|timezones in|tz in|timezone|timezones|tz)\s(.*)?', flags=re.IGNORECASE) r_timezone_2 = re.compile('(?:timezone in|timezones in|tz in|timezone|timezones|tz)\s(.*)?', flags=re.IGNORECASE)

View File

@ -484,9 +484,9 @@ def custom_dt_parse(query):
return query return query
r_next = re.compile('(?:next)?\s*(.*)', flags=re.IGNORECASE) r_next = re.compile('(?:next)\s*(.*)', flags=re.IGNORECASE)
r_prev = re.compile('(?:last|prev|previous)?\s*(.*)', flags=re.IGNORECASE) r_prev = re.compile('(?:last|prev|previous)\s*(.*)', flags=re.IGNORECASE)
r_this = re.compile('(?:this|that)?\s*(.*)', flags=re.IGNORECASE) r_this = re.compile('(?:this|that)\s*(.*)', flags=re.IGNORECASE)
def get_local_now_parsed(s): def get_local_now_parsed(s):
@ -686,25 +686,24 @@ def time_to_emoji(dt):
def workday_diff(start, end, workdays=None): def workday_diff(start, end, workdays=None):
""" """
Calculates the difference between two dates excluding weekends Calculates the difference between two dates excluding weekends
# TODO: doesn't work with Until (i.e. future calculation)
""" """
if start > end:
start, end = end, start
if not workdays: if not workdays:
workdays = range(0, 5) workdays = range(0, 5)
td = end - start td = end - start
daygenerator = (start + timedelta(x + 1) for x in range(td.days)) daygenerator = (start + timedelta(x + 1) for x in range(td.days))
weekdays = sum(1 for day in daygenerator if day.weekday() in workdays) weekdays = sum(1 for day in daygenerator if day.weekday() in workdays)
return timedelta(days=weekdays) return timedelta(days=weekdays, seconds=td.seconds)
def workhours_diff(start, end, workhour_begin="09:00", workhour_end="17:00", workdays=None): def workhours_diff(start, end, workhour_begin="09:00", workhour_end="17:00", workdays=None):
""" """
Calculates the difference between two dates excluding non-workhours Calculates the difference between two dates excluding non-workhours
This can potentially be very slow for long ranges as it calculates per minute resolution. This can potentially be very slow for long ranges as it calculates per minute resolution.
# TODO: doesn't work with Until (i.e. future calculation)
""" """
if start > end:
start, end = end, start
if not workdays: if not workdays:
workdays = range(0, 5) workdays = range(0, 5)