o
    l>je+                     @  s  d Z ddlmZ ddlmZmZ ddlmZ dZdSdd	ZdTddZ	dUddZ
dVddZdWddZdWddZdXddZdYddZdZd!d"Zd[d$d%Zd\d'd(Zd]d*d+Zd^d/d0Zd_d2d3Zd_d4d5Zd`d7d8Zd_d9d:Zdad<d=Zdbd@dAZdcdCdDZdddJdKZdLdLdMdedQdRZdLS )fz'Normalization helpers for CLI payloads.    )annotations)datetimetimezone)Anyi  returndict[str, Any]c              	   C  s<   |j }| jt|jt|j|jj|jj|jj|jj	|j
dS )zNormalize account summary data.)account_namedevices_countfamily_countused_storage_bytesavailable_storage_bytestotal_storage_bytesused_storage_percentsummary_plan)storager   lendevicesfamilyusageused_storage_in_bytesavailable_storage_in_bytestotal_storage_in_bytesused_storage_in_percentr   )apiaccountr    r   K/home/thesage/.local/lib/python3.10/site-packages/pyicloud/cli/normalize.pynormalize_account_summary   s   r   devicec                 C  &   |  d|  d|  d|  ddS )zNormalize account device data.idnamemodelDisplayNamedeviceClass)r    r!   model_display_namedevice_classget)r   r   r   r   normalize_account_device   
   r(   memberr   c                 C  s   | j | j| j| j| jdS )zNormalize family member data.	full_nameapple_iddsidage_classificationhas_parental_privilegesr+   )r*   r   r   r   normalize_family_member&   s   r1   r   c                 C  s4   | j j| j j| j j| j jddd | j D dS )z!Normalize storage usage payloads.)r   r   r   r   c                 S  s$   i | ]\}}||j |j|jd qS )labelcolorusage_in_bytesr2   ).0keyr   r   r   r   
<dictcomp><   s    z%normalize_storage.<locals>.<dictcomp>)r   usages_by_media)r   r   r   r   r   r9   items)r   r   r   r   normalize_storage2   s   r;   locateboolc                C  sb   t | ddt | ddt | ddt | ddt | ddt | ddt | dd|r-t | d	dd
S dd
S )z-Normalize a Find My device for summary views.r    Nr!   deviceDisplayNamer#   deviceModelbatteryLevelbatteryStatuslocation)r    r!   display_namer%   device_modelbattery_levelbattery_statusrB   getattr)r   r<   r   r   r   normalize_device_summaryG   s   






rI   c                C  s    t | |d}t| dd|d< |S )z.Normalize a Find My device for detailed views.)r<   dataNraw_data)rI   rH   )r   r<   payloadr   r   r   normalize_device_detailsV   s   rM   calendarc                 C  r   )zNormalize a calendar entry.guidtitler4   	shareType)rO   rP   r4   
share_typer&   )rN   r   r   r   normalize_calendar^   r)   rS   eventc                 C  s.   |  d|  d|  d|  d|  ddS )zNormalize a calendar event.rO   pGuidrP   	startDateendDate)rO   calendar_guidrP   startendr&   )rT   r   r   r   normalize_eventi   s   r[   contactc                 C  s>   |  d|  ddd |  dg D dd |  dg D dS )	zNormalize a contact entry.	firstNamelastNamec                 S     g | ]}| d dqS field r&   )r6   phoner   r   r   
<listcomp>{       z%normalize_contact.<locals>.<listcomp>phonesc                 S  r_   r`   r&   )r6   emailr   r   r   rd   |   re   emails)
first_name	last_namerf   rh   r&   )r\   r   r   r   normalize_contactu   s
   rk   mec                 C     | j | j| j| jdS )z#Normalize the 'me' contact payload.ri   rj   photorK   rn   )rl   r   r   r   normalize_me   
   rp   nodec                 C  rm   )zNormalize an iCloud Drive node.)r!   typesizemodified)r!   rs   rt   date_modified)rr   r   r   r   normalize_drive_node   rq   rw   albumc                 C  s   | j | jt| dS )zNormalize a photo album.)r!   r,   count)r!   fullnamer   )rx   r   r   r   normalize_album   s   r{   r7   strlibraryc                 C  sN   t |dd}t|tr|d}nd}| t |dd|t |ddt |dddS )zNormalize a photo library.zone_idNzoneNamescopecurrent_sync_tokenindexing_state)r7   r   	zone_namesync_cursorr   )rH   
isinstancedictr'   )r7   r}   r~   r   r   r   r   normalize_photo_library   s   



r   itemc              
   C  s.   | j | j| j| j| jt| ddt| dddS )zNormalize a photo asset.likedN
like_count)r    filename	item_typecreatedrt   r   r   )r    r   r   r   rt   rH   r   r   r   r   normalize_photo   s   

r   c              
   C  sJ   t | }|t| ddt| ddt| ddt| ddt| ddd |S )z)Normalize a detailed photo asset payload.
asset_dateN
added_date
dimensionsis_live_photoversions)r   r   r   r   r   )r   updaterH   )r   rL   r   r   r   normalize_photo_details   s   




	r   changec                 C  8   t | ddt | ddt | ddt | ddt | dddS )zNormalize a photo change event.kindNrecord_namerecord_typedeletedru   )r   r   r   r   ru   rG   )r   r   r   r   normalize_photo_change      




r   c                 C  r   )z%Normalize one photo sync action item.asset_idNresource_keypathactionreason)r   r   r   r   r   rG   r   r   r   r   normalize_photo_sync_item   r   r   resultc                 C  s   t | ddt | ddt | ddtt | dg pg t | ddt | ddt | d	d
t | dd
t | dd
t | dd
dd t | dg p@g D dS )z&Normalize a photo sync result payload.	directoryN
state_pathr}   albumsr   short_circuitedFdownloaded_countr   skipped_countdeleted_countlisted_countc                 S  s   g | ]}t |qS r   )r   )r6   r   r   r   r   rd      s    z/normalize_photo_sync_result.<locals>.<listcomp>r:   )r   r   r}   r   r   r   r   r   r   r   r:   )rH   list)r   r   r   r   normalize_photo_sync_result   s   








r   cursormetadatac                 K  s   t |}| |d< |S )z%Normalize sync cursor command output.r   )r   )r   r   rL   r   r   r   normalize_sync_cursor   s   r   aliasc                 C  s   |  d|  d|  ddS )z Normalize a Hide My Email alias.hmer3   anonymousId)rg   r3   anonymous_idr&   )r   r   r   r   normalize_alias  s   r   notes_servicelimitintinclude_deleted	list[Any]c                C  s   |dkrg S |rt | j|dS |}tt|dd d}	 t | j|d}dd |D }t||ks<t||k s<||krB|d	| S t|d
 |}q)z8Return recent notes, excluding deleted notes by default.r   r   
        Tc                 S  s   g | ]
}t |d ds|qS )
is_deletedFrG   )r6   rowr   r   r   rd     s    z'select_recent_notes.<locals>.<listcomp>N   )r   recentsminmaxr   )r   r   r   probe_limit	max_proberowsfilteredr   r   r   select_recent_notes  s   r   N)rP   title_containsrP   
str | Noner   c                  sb  |dkrg S |p	d  |pd    s sg S d fdd}ddd}g }t }tttd|d }| j|dD ]&}	|t|	ddsGq<||	}
|
|v rPq<||
 |	|	 t
||krb nq<t
||k r|  D ]&}	|t|	ddsxqm||	}
|
|v rqm||
 |	|	 t
||kr nqmtdddtjddfdd}|j|dd |d| S )zNReturn title-matched notes using recents-first search with full-scan fallback.r   rb   
note_titler   r   r=   c                   s0   | sdS r| krdS  r |   v rdS dS )NFT)lower)r   )containsexactr   r   matches7  s   z&search_notes_by_title.<locals>.matchesr   r   c                 S  s   t | dd p	t| S )Nr    )rH   r    r   r   r   r   
dedupe_key@  s   z)search_notes_by_title.<locals>.dedupe_keyr   2   r   rP   Ni     tzinfor   c                   s4   t | dd }|d u r S |jd u r|jtjdS |S )Nmodified_atr   )rH   r   replacer   utc)r   r   )epochr   r   sort_key`  s   
z'search_notes_by_title.<locals>.sort_keyT)r7   reverse)r   r   r   r=   )r   r   r   r   )r   r   r   r   )stripr   setr   MAX_NOTES_SEARCH_WINDOWr   r   rH   addappendr   iter_allr   r   r   sort)r   rP   r   r   r   r   
candidatesseenwindownoter7   r   r   )r   r   r   r   search_notes_by_title&  sL   	
	



r   )r   r   )r   r   r   r   )r*   r   r   r   )r   r   r   r   )r   r   r<   r=   r   r   )rN   r   r   r   )rT   r   r   r   )r\   r   r   r   )rl   r   r   r   )rr   r   r   r   )rx   r   r   r   )r7   r|   r}   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r|   r   r   r   r   )r   r   r   r   )r   r   r   r   r   r=   r   r   )
r   r   rP   r   r   r   r   r   r   r   )__doc__
__future__r   r   r   typingr   r   r   r(   r1   r;   rI   rM   rS   r[   rk   rp   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s:    






















