
    h=                         d dl Z d dlZd dlmZmZmZmZ d dlmZmZm	Z	m
Z
  ej                  d      ZdedefdZdeeef   deeef   fd	Zd
e
eedf   defdZde
eef   defdZd ZdededefdZy)    N)datedatetime	timedeltatimezone)AnyDictListUnionz;((?<=[a-z0-9])[A-Z]|(?!^)[A-Z](?=[a-z])|(?<=[a-zA-Z])[0-9])	camel_strreturnc                 N    t         j                  d|       }|j                         S )Nz_\1)CAMEL_TO_SNAKEsublower)r   	snake_strs     F/var/www/html/python/myenv/lib/python3.12/site-packages/garth/utils.pycamel_to_snaker      s!    ""695I??    
camel_dictc                     i }| j                         D ]s  \  }}t        |      }t        |t              rt	        |      ||<   0t        |t
              r/|D cg c]  }t        |t              rt	        |      n|! c}||<   o|||<   u |S c c}w )z}
    Converts a dictionary's keys from camel case to snake case. This version
    handles nested dictionaries and lists.
    )itemsr   
isinstancedictcamel_to_snake_dictlist)r   
snake_dictkvnew_keyis         r   r   r      s    
 "$J  " 	$1 #a"5a"8Jw4 NO#IJ*Q*=#A&1D#Jw #$Jw	$ #s   $Bendc                     | t        j                         } | S t        | t              rt        j                  |       } | S N)r   todayr   strfromisoformat)r!   s    r   format_end_dater'   $   s:    
{jjl J 
C	  %Jr   date_daysc              #      K   t        | t              r| nt        j                  |       } t        |      D ]  }| t	        |      z
    y w)N)r)   )r   r   r&   ranger   )r(   r)   days      r   
date_ranger-   ,   sD     t,E$2D2DU2KET{ *iS)))*s   A
Ac                 p   t        j                  |       rLi }t        j                  |       D ]0  }t        | |j                        }t        |      ||j                  <   2 |S t        | t              r| D cg c]  }t        |       c}S t        | t        t        f      r| j                         S | S c c}w r#   )dataclassesis_dataclassfieldsgetattrnameasdictr   r	   r   r   	isoformat)objresultfieldvaluer   s        r   r4   r4   2   s    $ '', 	/EC,E!'F5::	/ #t#&'aq	''#$'(}}J (s   6B3gmt_timestamplocal_timestampc                     || z
  }t        t        |            }t        j                  | dz  t         j                        }|j                  |      S )N)millisecondsi  )r   r   r   fromtimestamputc
astimezone)r:   r;   
local_difflocal_offsetgmt_times        r   get_localized_datetimerD   C   sI     !=0JI:>?L%%md&:HLLIH|,,r   )r/   rer   r   r   r   typingr   r   r	   r
   compiler   r%   r   r   r'   intr-   r4   rD    r   r   <module>rJ      s     	 8 8 ) ) B
c c 
DcN tCH~ &tS$/ D *eD#I& *c *"--),--r   