Coverage for health / utils / date_utils.py: 0%

22 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-03-02 17:44 +0800

1""" 

2Date utility functions for health data sync. 

3""" 

4 

5from datetime import date, datetime, timedelta 

6from typing import List, Tuple 

7 

8 

9def parse_date(date_str: str) -> date: 

10 """Parse date string in YYYY-MM-DD format. 

11 

12 Args: 

13 date_str: Date string to parse 

14 

15 Returns: 

16 Parsed date object 

17 

18 Raises: 

19 ValueError: If date string is invalid 

20 """ 

21 try: 

22 return datetime.strptime(date_str, "%Y-%m-%d").date() 

23 except ValueError as e: 

24 raise ValueError(f"Invalid date format '{date_str}'. Expected YYYY-MM-DD.") from e 

25 

26 

27def date_range(start: date, end: date) -> List[date]: 

28 """Generate list of dates between start and end (inclusive). 

29 

30 Args: 

31 start: Start date 

32 end: End date 

33 

34 Returns: 

35 List of dates from start to end 

36 """ 

37 days = (end - start).days + 1 

38 return [start + timedelta(days=i) for i in range(days)] 

39 

40 

41def split_date_range( 

42 start: date, end: date, batch_size: int = 30 

43) -> List[Tuple[date, date]]: 

44 """Split a date range into smaller batches. 

45 

46 Args: 

47 start: Start date 

48 end: End date 

49 batch_size: Maximum days per batch (default: 30) 

50 

51 Returns: 

52 List of (batch_start, batch_end) tuples 

53 """ 

54 batches = [] 

55 current = start 

56 

57 while current <= end: 

58 batch_end = min(current + timedelta(days=batch_size - 1), end) 

59 batches.append((current, batch_end)) 

60 current = batch_end + timedelta(days=1) 

61 

62 return batches 

63 

64 

65def get_yesterday() -> date: 

66 """Get yesterday's date. 

67 

68 Returns: 

69 Yesterday's date 

70 """ 

71 return date.today() - timedelta(days=1) 

72 

73 

74def format_date(d: date) -> str: 

75 """Format date as YYYY-MM-DD string. 

76 

77 Args: 

78 d: Date to format 

79 

80 Returns: 

81 Formatted date string 

82 """ 

83 return d.strftime("%Y-%m-%d")