2017-07-07 00:11:20 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import re
|
|
|
|
import random
|
2017-07-31 13:29:59 +00:00
|
|
|
from typing import Tuple
|
2017-07-07 00:11:20 +00:00
|
|
|
from pprint import pprint
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
|
|
|
TIME_UNITS = {
|
|
|
|
's': 'seconds',
|
|
|
|
'm': 'minutes',
|
|
|
|
'h': 'hours',
|
|
|
|
'd': 'days',
|
|
|
|
'w': 'weeks',
|
|
|
|
'mon': 'months',
|
|
|
|
'y': 'years',
|
|
|
|
}
|
|
|
|
|
|
|
|
pp = pprint
|
|
|
|
|
|
|
|
|
|
|
|
def date_from_iso(date: str) -> datetime:
|
|
|
|
return datetime.strptime(date, '%Y-%m-%dT%H:%M:%S.%fZ')
|
|
|
|
|
|
|
|
|
|
|
|
def time_delta(text: str) -> timedelta:
|
|
|
|
match = re.match(r'(\d+)(s|m|h|mon|w|y)', text)
|
|
|
|
if match:
|
|
|
|
num, unit = match.groups()
|
|
|
|
num = int(num)
|
|
|
|
unit = TIME_UNITS[unit]
|
|
|
|
if unit == 'mon':
|
|
|
|
num *= 4
|
|
|
|
elif unit == 'y':
|
|
|
|
num *= 52
|
|
|
|
return timedelta(**{unit: num})
|
|
|
|
|
|
|
|
|
2017-07-31 13:29:59 +00:00
|
|
|
def parse_int(val: str, select: bool = True) -> Tuple[int, str]:
|
2017-07-07 00:11:20 +00:00
|
|
|
try:
|
|
|
|
val = int(val)
|
|
|
|
if val is not 0:
|
|
|
|
if val < 1:
|
|
|
|
order = 'desc'
|
|
|
|
val *= -1
|
|
|
|
else:
|
|
|
|
order = 'asc'
|
|
|
|
if select:
|
|
|
|
val -= 1
|
|
|
|
return val, order
|
|
|
|
except ValueError:
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
def re_generator(low: int = 5, high: int = 20) -> str:
|
|
|
|
return 'R{}'.format(''.join('E' for _ in range(random.randint(low, high))))
|