§
    {›jï  ã                   ó&  — d dl Z d dlZd dlmZmZmZmZ d dl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
de
fd„Zdee
ef         dee
ef         fd„Zdee
z  dz  defd„Zdee
z  defd„Zd„ Zdededefd„ZdS )é    N)ÚdateÚdatetimeÚ	timedeltaÚtimezone)ÚAnyz;((?<=[a-z0-9])[A-Z]|(?!^)[A-Z](?=[a-z])|(?<=[a-zA-Z])[0-9])Ú	camel_strÚreturnc                 ó`   — t                                d| ¦  «        }|                     ¦   «         S )Nz_\1)ÚCAMEL_TO_SNAKEÚsubÚlower)r   Ú	snake_strs     úH/home/lighthouse/health/venv/lib/python3.11/site-packages/garth/utils.pyÚcamel_to_snaker      s'   € Ý×"Ò" 6¨9Ñ5Ô5€IØ�?Š?ÑÔÐó    Ú
camel_dictc                 ó   — i }|                       ¦   «         D ]f\  }}t          |¦  «        }t          |t          ¦  «        rt	          |¦  «        ||<   Œ<t          |t
          ¦  «        rd„ |D ¦   «         ||<   Œa|||<   Œg|S )z}
    Converts a dictionary's keys from camel case to snake case. This version
    handles nested dictionaries and lists.
    c                 óZ   — g | ](}t          |t          ¦  «        rt          |¦  «        n|‘Œ)S © )Ú
isinstanceÚdictÚcamel_to_snake_dict©Ú.0Úis     r   ú
<listcomp>z'camel_to_snake_dict.<locals>.<listcomp>   sB   € ð #ð #ð #ØIJ­*°Q½Ñ*=Ô*=ÐDÕ# AÑ&Ô&Ð&À1ð#ð #ð #r   )Úitemsr   r   r   r   Úlist)r   Ú
snake_dictÚkÚvÚnew_keys        r   r   r      s©   € ð
 "$€JØ× Ò Ñ"Ô"ð 	$ð 	$‰ˆˆ1Ý  Ñ#Ô#ˆÝ�a�ÑÔð 	$Ý"5°aÑ"8Ô"8ˆJ�wÑÐÝ˜�4Ñ Ô ð 	$ð#ð #ØNOð#ñ #ô #ˆJ�wÑÐð #$ˆJ�wÑÐØÐr   Úkeyc                 óD   — |                       d¦  «        r
| dd…         S | S )z%Remove _dto or DTO suffix from a key.Ú_dtoNéüÿÿÿ)Úendswith)r#   s    r   Úremove_dto_suffixr(   $   s(   € à
‡|‚|�FÑÔð Ø�3�B�3ŒxˆØ€Jr   Údatac                 ó   — i }|                       ¦   «         D ]f\  }}t          |¦  «        }t          |t          ¦  «        rt	          |¦  «        ||<   Œ<t          |t
          ¦  «        rd„ |D ¦   «         ||<   Œa|||<   Œg|S )a#  
    Recursively remove _dto suffix from dictionary keys.

    The activity detail endpoint returns keys like 'activity_type_dto' and
    'summary_dto', while the list endpoint returns 'activity_type' and has
    no summary. This function normalizes the keys for consistent field names.
    c                 óZ   — g | ](}t          |t          ¦  «        rt          |¦  «        n|‘Œ)S r   )r   r   Úremove_dto_suffix_from_dictr   s     r   r   z/remove_dto_suffix_from_dict.<locals>.<listcomp>9   sE   € ð ð ð àõ 3=¸QÅÑ2EÔ2EÐLÕ+¨AÑ.Ô.Ð.È1ðð ð r   )r   r(   r   r   r,   r   )r)   Úresultr    r!   r"   s        r   r,   r,   +   sž   € ð  €FØ—
’
‘”ð 
 ð 
 ‰ˆˆ1Ý# AÑ&Ô&ˆÝ�a�ÑÔð 	 Ý9¸!Ñ<Ô<ˆF�7‰OˆOÝ˜�4Ñ Ô ð 	 ðð àðñ ô ˆF�7‰OˆOð
  ˆF�7‰OˆOØ€Mr   Úendc                 ó„   — | €t          j        ¦   «         } n)t          | t          ¦  «        rt          j        | ¦  «        } | S )N)r   Útodayr   ÚstrÚfromisoformat)r.   s    r   Úformat_end_dater3   B   s;   € Ø
€{ÝŒj‰lŒlˆˆÝ	�C�Ñ	Ô	ð &ÝÔ  Ñ%Ô%ˆØ€Jr   Údate_Údaysc              #   ó®   K  — t          | t          ¦  «        r| nt          j        | ¦  «        } t          |¦  «        D ]}| t	          |¬¦  «        z
  V — Œd S )N)r5   )r   r   r2   Úranger   )r4   r5   Údays      r   Ú
date_ranger9   J   sg   è è € Ý ¥tÑ,Ô,ÐKˆEˆEµ$Ô2DÀUÑ2KÔ2K€EÝ�T‰{Œ{ð *ð *ˆØ•i SÐ)Ñ)Ô)Ñ)Ð)Ð)Ð)Ð)ð*ð *r   c                 ó`  — t          j        | ¦  «        rGi }t          j        | ¦  «        D ].}t          | |j        ¦  «        }t          |¦  «        ||j        <   Œ/|S t          | t          ¦  «        rd„ | D ¦   «         S t          | t          t          z  ¦  «        r|  
                    ¦   «         S | S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r   )Úasdict)r   r!   s     r   r   zasdict.<locals>.<listcomp>Y   s   € Ð'Ð'Ð'˜a•�q‘	”	Ð'Ð'Ð'r   )ÚdataclassesÚis_dataclassÚfieldsÚgetattrÚnamer<   r   r   r   r   Ú	isoformat)Úobjr-   ÚfieldÚvalues       r   r<   r<   P   s®   € ÝÔ Ñ$Ô$ð ØˆÝ Ô'¨Ñ,Ô,ð 	/ð 	/ˆEÝ˜C ¤Ñ,Ô,ˆEÝ!'¨¡¤ˆF�5”:ÑÐØˆå�#•tÑÔð (Ø'Ð' 3Ð'Ñ'Ô'Ð'å�#•x¥$‘Ñ'Ô'ð Ø�}Š}‰ŒÐà€Jr   Úgmt_timestampÚlocal_timestampc                 ó´   — || z
  }t          t          |¬¦  «        ¦  «        }t          j        | dz  t           j        ¦  «        }|                     |¦  «        S )N)Úmillisecondsiè  )r   r   r   ÚfromtimestampÚutcÚ
astimezone)rF   rG   Ú
local_diffÚlocal_offsetÚgmt_times        r   Úget_localized_datetimerP   a   sS   € ð ! =Ñ0€JÝ�I°:Ð>Ñ>Ô>Ñ?Ô?€LÝÔ% m°dÑ&:½H¼LÑIÔI€HØ×Ò˜|Ñ,Ô,Ð,r   )r=   Úrer   r   r   r   Útypingr   Úcompiler   r1   r   r   r   r(   r,   r3   Úintr9   r<   rP   r   r   r   ú<module>rU      s¦  ðØ Ð Ð Ð Ø 	€	€	€	Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø Ð Ð Ð Ð Ð ð �”ØBñô €ð
˜cð  cð ð ð ð ð
 D¨¨c¨¤Nð °t¸CÀ¸H´~ð ð ð ð ð&˜3ð  3ð ð ð ð ð d¨3°¨8¤nð ¸¸cÀ3¸h¼ð ð ð ð ð.˜ ™ dÑ*ð ¨tð ð ð ð ð*�d˜S‘jð *¨ð *ð *ð *ð *ðð ð ð"-Øð-Ø),ð-àð-ð -ð -ð -ð -ð -r   