
    mi/                         d Z ddlmZmZmZ ddlmZmZ dedefdZdededee         fd	Z		 ddedede
deeeef                  fdZdefdZdedefdZdS )z.
Date utility functions for health data sync.
    )datedatetime	timedelta)ListTupledate_strreturnc                     	 t          j        | d                                          S # t          $ r}t          d|  d          |d}~ww xY w)zParse date string in YYYY-MM-DD format.

    Args:
        date_str: Date string to parse

    Returns:
        Parsed date object

    Raises:
        ValueError: If date string is invalid
    %Y-%m-%dzInvalid date format 'z'. Expected YYYY-MM-DD.N)r   strptimer   
ValueError)r   es     0/root/projects/butler/health/utils/date_utils.py
parse_dater   	   sg    [ :66;;=== [ [ [RRRRSSYZZ[s   &) 
AAAstartendc                 T     | z
  j         dz   } fdt          |          D             S )zGenerate list of dates between start and end (inclusive).

    Args:
        start: Start date
        end: End date

    Returns:
        List of dates from start to end
       c                 6    g | ]}t          |           z   S )days)r   ).0ir   s     r   
<listcomp>zdate_range.<locals>.<listcomp>&   s)    ;;;!EI1%%%%;;;    )r   range)r   r   r   s   `  r   
date_ranger      s6     %K!D;;;;uT{{;;;;r      
batch_sizec                     g }| }||k    rTt          |t          |dz
            z   |          }|                    ||f           |t          d          z   }||k    T|S )zSplit a date range into smaller batches.

    Args:
        start: Start date
        end: End date
        batch_size: Maximum days per batch (default: 30)

    Returns:
        List of (batch_start, batch_end) tuples
    r   r   )minr   append)r   r   r   batchescurrent	batch_ends         r   split_date_ranger&   )   sx     GG
S..)a"@"@"@@#FF	+,,,iQ//// S..
 Nr   c                  J    t          j                    t          d          z
  S )zAGet yesterday's date.

    Returns:
        Yesterday's date
    r   r   )r   todayr    r   r   get_yesterdayr*   A   s      :<<)+++++r   dc                 ,    |                      d          S )zwFormat date as YYYY-MM-DD string.

    Args:
        d: Date to format

    Returns:
        Formatted date string
    r   )strftime)r+   s    r   format_dater.   J   s     ::j!!!r   N)r   )__doc__r   r   r   typingr   r   strr   r   intr&   r*   r.   r)   r   r   <module>r3      s/    / . . . . . . . . .        [ [ [ [ [ [$<d < <$t* < < < < /1 (+	%d

   0,t , , , ,	"4 	"C 	" 	" 	" 	" 	" 	"r   