home · contact · privacy
711da95efabfc97153cca3c5d85eb63348244397
[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 MIN_RANGE_DATE = '2024-01-01'
7 MAX_RANGE_DATE = '2030-12-31'
8
9
10 def valid_date(date_str: str) -> str:
11     """Validate date against DATE_FORMAT or 'today'/'yesterday'/'tomorrow.
12
13     In any case, returns in DATE_FORMAT.
14     """
15     if date_str == 'today':
16         date_str = todays_date()
17     elif date_str == 'yesterday':
18         date = datetime.now() - timedelta(days=1)
19         date_str = date.strftime(DATE_FORMAT)
20     elif date_str == 'tomorrow':
21         date = datetime.now() + timedelta(days=1)
22         date_str = date.strftime(DATE_FORMAT)
23     try:
24         dt = datetime.strptime(date_str, DATE_FORMAT)
25     except (ValueError, TypeError) as e:
26         msg = f'Given date of wrong format: {date_str}'
27         raise BadFormatException(msg) from e
28     return dt.strftime(DATE_FORMAT)
29
30
31 def todays_date() -> str:
32     """Return current date in DATE_FORMAT."""
33     return datetime.now().strftime(DATE_FORMAT)