def cast_date(date_str): try: words = date_str.split(' ') except AttributeError: date = gmtime(date_str) if hasattr(date_str, 'real') else date_str else: mathish = set(words).intersection(MATH_WORDS) textish = set(words).intersection(TEXT_WORDS) if date_str[0] in {'+', '-'} and len(mathish) == 1: op = sub if date_str.startswith('-') else add date = get_date(mathish, words[0][1:], op) elif len(textish) == 2: date = get_date('%ss' % words[1], 1, add) elif date_str in DATES: date = DATES.get(date_str) else: date = parser.parse(date_str, tzinfos=TZINFOS) if date: normal = normalize_date(date) tt = get_tt(normal) # Make Sunday the first day of the week day_of_w = 0 if tt[6] == 6 else tt[6] + 1 isdst = None if tt[8] == -1 else bool(tt[8]) result = {'utime': timegm(tt), 'timezone': 'UTC', 'date': normal} result.update(zip(TT_KEYS, tt)) # pylint: disable=W1637 result.update({'day_of_week': day_of_w, 'daylight_savings': isdst}) else: result = {} return result