
    Dje+                        d Z ddlmZ ddlmZmZ ddlmZ dZd=dZd>d
Z	d?dZ
d@dZdAdZdAdZdBdZdCdZdDdZdEdZdFdZdGdZdHd#ZdId%ZdId&ZdJd(ZdId)ZdKd+ZdLd.ZdMd0ZdNd6Zd7d7d8dOd<Zd7S )Pz'Normalization helpers for CLI payloads.    )annotations)datetimetimezone)Anyi  returndict[str, Any]c           	         |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   s      Q/home/thesage/.hermes/venv/lib/python3.11/site-packages/pyicloud/cli/normalize.pynormalize_account_summaryr      s`     oG(W_--GN++%mA#*=#K&}C ' E,	 	 	    devicec                    |                      d          |                      d          |                      d          |                      d          dS )zNormalize account device data.idnamemodelDisplayNamedeviceClass)r"   r#   model_display_namedevice_classget)r    s    r   normalize_account_devicer*      sP     jj

6""$jj);<<

=11	  r   memberr   c                D    | j         | j        | j        | j        | j        dS )zNormalize family member data.	full_nameapple_iddsidage_classificationhas_parental_privilegesr-   )r+   s    r   normalize_family_memberr3   &   s/     %O$7#)#A  r   r   c                    | j         j        | j         j        | j         j        | j         j        dd | j                                        D             dS )z!Normalize storage usage payloads.)r   r   r   r   c                @    i | ]\  }}||j         |j        |j        d S )labelcolorusage_in_bytesr6   ).0keyr   s      r   
<dictcomp>z%normalize_storage.<locals>.<dictcomp><   sH     
 
 
 U "'"6 
 
 
r   )r   usages_by_media)r   r   r   r   r   r=   items)r   s    r   normalize_storager?   2   sj    
 &-]%H*1-*R&-m&J'.}'L	
 

 
 &5;;==
 
 
  r   locateboolc                  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          n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_statusrG   getattr)r    r@   s     r   normalize_device_summaryrN   G   s     fdD))--(;TBBt<<t<< >>!&/4@@9?IGFJ555T	 	 	r   c               P    t          | |          }t          | dd          |d<   |S )z.Normalize a Find My device for detailed views.)r@   dataNraw_data)rN   rM   )r    r@   payloads      r   normalize_device_detailsrS   V   s1     'vf===G!&&$77GJNr   calendarc                    |                      d          |                      d          |                      d          |                      d          dS )zNormalize a calendar entry.guidtitler8   	shareType)rV   rW   r8   
share_typer(   )rT   s    r   normalize_calendarrZ   ^   sO     V$$g&&g&&ll;//	  r   eventc                    |                      d          |                      d          |                      d          |                      d          |                      d          dS )zNormalize a calendar event.rV   pGuidrW   	startDateendDate)rV   calendar_guidrW   startendr(   )r[   s    r   normalize_eventrc   i   s^     		&!!7++7##;''yy##  r   contactc                    |                      d          |                      d          d |                      dg           D             d |                      dg           D             dS )zNormalize a contact entry.	firstNamelastNamec                :    g | ]}|                     d d          S field r(   )r:   phones     r   
<listcomp>z%normalize_contact.<locals>.<listcomp>{   &    QQQe599Wb))QQQr   phonesc                :    g | ]}|                     d d          S ri   r(   )r:   emails     r   rm   z%normalize_contact.<locals>.<listcomp>|   rn   r   emails)
first_name	last_namero   rr   r(   )rd   s    r   normalize_contactru   u   so     kk+..[[,,QQw{{8R7P7PQQQQQw{{8R7P7PQQQ	  r   mec                8    | j         | j        | j        | j        dS )z#Normalize the 'me' contact payload.rs   rt   photorQ   rx   )rv   s    r   normalize_merz      s'     m\K	  r   nodec                8    | j         | j        | j        | j        dS )zNormalize an iCloud Drive node.)r#   typesizemodified)r#   r}   r~   date_modified)r{   s    r   normalize_drive_noder      s(     			&	  r   albumc                <    | j         | j        t          |           dS )zNormalize a photo album.)r#   r.   count)r#   fullnamer   )r   s    r   normalize_albumr      s&     
^U  r   r;   strlibraryc           	         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)r;   r   	zone_namesync_cursorr   )rM   
isinstancedictr)   )r;   r   r   r   s       r   normalize_photo_libraryr      s     gy$//G'4   KK
++			'400w(<dCC!'+;TBB  r   itemc                    | 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createdr~   r   r   )r"   r   r   r   r~   rM   r   s    r   normalize_photor      sJ     gM^<	w--dL$77  r   c                    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   updaterM   )r   rR   s     r   normalize_photo_detailsr      s     d##GNN!$d;;!$d;;!$d;;$T?DAAj$77	
 	
   Nr   changec           	         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deletedr   )r   r   r   r   r   rL   )r   s    r   normalize_photo_changer      s^     --v}d;;v}d;;69d33FJ55  r   c           	         t          | dd          t          | dd          t          | dd          t          | dd          t          | dd          dS )z%Normalize one photo sync action item.asset_idNresource_keypathactionreason)r   r   r   r   r   rL   r   s    r   normalize_photo_sync_itemr      s^     D*d33nd;;fd++$$//$$//  r   resultc                   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 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                ,    g | ]}t          |          S  )r   )r:   r   s     r   rm   z/normalize_photo_sync_result.<locals>.<listcomp>   s0     
 
 
 &d++
 
 
r   r>   )r   r   r   r   r   r   r   r   r   r   r>   )rM   list)r   s    r   normalize_photo_sync_resultr      s     V[$77flD9969d33wvx44:;;v}d;;"6+<eDD#F,>BB !<< !<<::
 
44:
 
 
  r   cursormetadatac                .    t          |          }| |d<   |S )z%Normalize sync cursor command output.r   )r   )r   r   rR   s      r   normalize_sync_cursorr      s     8nnG#GMNr   aliasc                    |                      d          |                      d          |                      d          dS )z Normalize a Hide My Email alias.hmer7   anonymousId)rq   r7   anonymous_idr(   )r   s    r   normalize_aliasr     s@     5!!7##		-00  r   notes_servicelimitintinclude_deleted	list[Any]c                  |dk    rg S |r#t          |                     |                    S |}t          t          |d          dz  d          }	 t          |                     |                    }d |D             }t	          |          |k    st	          |          |k     s||k    r
|d|         S t          |d	z  |          }y)
z8Return recent notes, excluding deleted notes by default.r   r   
        Tc                4    g | ]}t          |d d          |S )
is_deletedFrL   )r:   rows     r   rm   z'select_recent_notes.<locals>.<listcomp>  s)    QQQCwsL%/P/PQCQQQr   N   )r   recentsminmaxr   )r   r   r   probe_limit	max_proberowsfiltereds          r   select_recent_notesr     s    
 zz	 8M)))66777KCrNNQ&,,I	6M)))<<==QQ4QQQMMU""4yy;&&i''FUF##+/955	6r   N)rW   title_containsrW   
str | Noner   c                  |dk    rg S |pd                                 |pd                                                                 ssg S dfd}dd
}g }t                      }t          t          t          d|dz                      }|                     |          D ]l}	 |t          |	dd                    s ||	          }
|
|v r-|                    |
           |	                    |	           t          |          |k    r nmt          |          |k     r|                                 D ]l}	 |t          |	dd                    s ||	          }
|
|v r-|                    |
           |	                    |	           t          |          |k    r nmt          dddt          j                  dfd}|                    |d           |d|         S )zNReturn title-matched notes using recents-first search with full-scan fallback.r   rk   
note_titler   r   rA   c                X    | sdS r| k    rdS r|                                  v rdS dS )NFT)lower)r   containsexacts    r   matchesz&search_notes_by_title.<locals>.matches7  sO     	5 	Z5((4 	J$4$4$6$6664ur   r   r   c                B    t          | dd           pt          |           S )Nr"   )rM   r"   r   s    r   
dedupe_keyz)search_notes_by_title.<locals>.dedupe_key@  s    tT4((4BtHH4r   r   2   r   rW   Ni     tzinfor   c                    t          | dd           }|S |j         |                    t          j                  S |S )Nmodified_atr   )rM   r   replacer   utc)r   r   epochs     r   sort_keyz'search_notes_by_title.<locals>.sort_key`  sG    dM488L%&&hl&;;;r   T)r;   reverse)r   r   r   rA   )r   r   r   r   )r   r   r   r   )stripr   setr   MAX_NOTES_SEARCH_WINDOWr   r   rM   addappendr   iter_allr   r   r   sort)r   rW   r   r   r   r   
candidatesseenwindownoter;   r   r   r   r   s               @@@r   search_notes_by_titler  &  sf    zz	[b!!E$"++--3355H  	      5 5 5 5 JUUD(#c52:*>*>??F%%F%33 	 	wwtWd3344 	j$;;$z??e##E $ :!**,, 		 		D774$7788 *T""Cd{{HHSMMMd###:%'' ( T1a555E      OO$O///fufr   )r   r   )r    r   r   r   )r+   r   r   r   )r   r   r   r   )r    r   r@   rA   r   r   )rT   r   r   r   )r[   r   r   r   )rd   r   r   r   )rv   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   r   r   )r   r   r   r   r   rA   r   r   )
r   r   rW   r   r   r   r   r   r   r   )__doc__
__future__r   r   r   typingr   r   r   r*   r3   r?   rN   rS   rZ   rc   ru   rz   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   <module>r     s)   - - " " " " " " ' ' ' ' ' ' ' '              	 	 	 	   *         	 	 	 	               "       	 	 	 		 	 	 	   *      6 6 6 66 !%	C C C C C C C Cr   