import re, typing import datetime as _datetime import dateutil.parser, isodate from .common import * def iso8601(s: str) -> _datetime.datetime: return dateutil.parser.parse(s) def iso8601_duration(s: str) -> _datetime.timedelta: return isodate.parse_duration(s) def date_human(s: str) -> typing.Optional[_datetime.datetime]: try: return _datetime.datetime.strptime(s, DATE_HUMAN) except ValueError: return None REGEX_PRETTYTIME = re.compile( r"(?:(\d+)w)?(?:(\d+)d)?(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?", re.I) def from_pretty_time(pretty_time: str) -> typing.Optional[int]: seconds = 0 match = re.match(REGEX_PRETTYTIME, pretty_time) if match: seconds += int(match.group(1) or 0)*SECONDS_WEEKS seconds += int(match.group(2) or 0)*SECONDS_DAYS seconds += int(match.group(3) or 0)*SECONDS_HOURS seconds += int(match.group(4) or 0)*SECONDS_MINUTES seconds += int(match.group(5) or 0) if seconds > 0: return seconds return None