58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
import re
|
|
from datetime import datetime, time
|
|
|
|
import aniso8601
|
|
|
|
from . import logger
|
|
|
|
|
|
_DATE_PATTERNS = {
|
|
# "today", "tomorrow", "november twenty-fifth": 2015-11-25
|
|
'^\d{4}-\d{2}-\d{2}$': '%Y-%m-%d',
|
|
# "this week", "next week": 2015-W48
|
|
'^\d{4}-W\d{2}$': '%Y-W%U-%w',
|
|
# "this weekend": 2015-W48-WE
|
|
'^\d{4}-W\d{2}-WE$': '%Y-W%U-WE-%w',
|
|
# "this month": 2015-11
|
|
'^\d{4}-\d{2}$': '%Y-%m',
|
|
# "next year": 2016
|
|
'^\d{4}$': '%Y',
|
|
}
|
|
|
|
|
|
def to_date(amazon_date):
|
|
# make so 'next decade' matches work against 'next year' regex
|
|
amazon_date = re.sub('X$', '0', amazon_date)
|
|
for re_pattern, format_pattern in list(_DATE_PATTERNS.items()):
|
|
if re.match(re_pattern, amazon_date):
|
|
if '%U' in format_pattern:
|
|
# http://stackoverflow.com/a/17087427/1163855
|
|
amazon_date += '-0'
|
|
return datetime.strptime(amazon_date, format_pattern).date()
|
|
return None
|
|
|
|
|
|
def to_time(amazon_time):
|
|
if amazon_time == "AM":
|
|
return time(hour=0)
|
|
if amazon_time == "PM":
|
|
return time(hour=12)
|
|
if amazon_time == "MO":
|
|
return time(hour=5)
|
|
if amazon_time == "AF":
|
|
return time(hour=12)
|
|
if amazon_time == "EV":
|
|
return time(hour=17)
|
|
if amazon_time == "NI":
|
|
return time(hour=21)
|
|
try:
|
|
return aniso8601.parse_time(amazon_time)
|
|
except ValueError as e:
|
|
logger.warn("ValueError for amazon_time '{}'.".format(amazon_time))
|
|
logger.warn("ValueError message: {}".format(e.message))
|
|
return None
|
|
|
|
|
|
def to_timedelta(amazon_duration):
|
|
return aniso8601.parse_duration(amazon_duration)
|