timedelta.py (1498B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\datetimeutils\parsers\timedelta.py 2 import datetime 3 import re 4 _string_types = tuple({type(u''), type('')}) 5 _PERIOD_PART = re.compile('([+-]?(?:\\d+(?:\\.(?:\\d+)?)?|\\.\\d+))\\s*([a-z]+)\\s*', re.IGNORECASE) 6 _KEYWORDS = {'d': 'days', 7 'day': 'days', 8 'days': 'days', 9 'h': 'hours', 10 'hr': 'hours', 11 'hrs': 'hours', 12 'hour': 'hours', 13 'hours': 'hours', 14 'm': 'minutes', 15 'i': 'minutes', 16 'min': 'minutes', 17 'mins': 'minutes', 18 'minute': 'minutes', 19 'minutes': 'minutes', 20 's': 'seconds', 21 'sec': 'seconds', 22 'secs': 'seconds', 23 'second': 'seconds', 24 'seconds': 'seconds', 25 'w': 'weeks', 26 'wk': 'weeks', 27 'wks': 'weeks', 28 'week': 'weeks', 29 'weeks': 'weeks'} 30 31 def _parse_split(string): 32 if string and isinstance(string, _string_types): 33 buf = [] 34 string = string.strip().lower() 35 for match in _PERIOD_PART.finditer(string): 36 buf.append(match.groups()) 37 38 return buf or None 39 40 41 def _timedelta_keywords(list_of_lists): 42 kw_map = {} 43 for num, kw in list_of_lists: 44 kw_map[_KEYWORDS[kw]] = float(num) 45 46 return kw_map 47 48 49 def str_to_timedelta(string, default = 0): 50 if default == 0: 51 default = datetime.timedelta(seconds=0) 52 res = _parse_split(string) 53 if res: 54 try: 55 return datetime.timedelta(**_timedelta_keywords(res)) 56 except (ValueError, KeyError, IndexError): 57 return default 58 59 else: 60 return default