home · contact · privacy
Re-factor date ranging and default to range 'yesterday' to 'tomorrow'.
[plomtask] / plomtask / dating.py
1 """Various utilities for handling dates."""
2 from datetime import datetime, timedelta
3 from plomtask.exceptions import BadFormatException
4
5 DATE_FORMAT = '%Y-%m-%d'
6
7
8 def valid_date(date_str: str) -> str:
9     """Validate date against DATE_FORMAT or 'today'/'yesterday'/'tomorrow.
10
11     In any case, returns in DATE_FORMAT.
12     """
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)
21     try:
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)
27
28
29 def todays_date() -> str:
30     """Return current date in DATE_FORMAT."""
31     return datetime.now().strftime(DATE_FORMAT)