1 """Various utilities for handling dates."""
2 from datetime import datetime, timedelta
3 from plomtask.exceptions import BadFormatException
5 DATE_FORMAT = '%Y-%m-%d'
8 def valid_date(date_str: str) -> str:
9 """Validate date against DATE_FORMAT or 'today'/'yesterday'/'tomorrow.
11 In any case, returns in DATE_FORMAT.
13 if date_str == 'today':
14 date_str = todays_date()
15 elif date_str == 'yesterday':
16 date = datetime.now() - timedelta(days=1)
17 date_str = date.strftime(DATE_FORMAT)
18 elif date_str == 'tomorrow':
19 date = datetime.now() + timedelta(days=1)
20 date_str = date.strftime(DATE_FORMAT)
22 dt = datetime.strptime(date_str, DATE_FORMAT)
23 except (ValueError, TypeError) as e:
24 msg = f'Given date of wrong format: {date_str}'
25 raise BadFormatException(msg) from e
26 return dt.strftime(DATE_FORMAT)
29 def todays_date() -> str:
30 """Return current date in DATE_FORMAT."""
31 return datetime.now().strftime(DATE_FORMAT)