
    =[jc2                        d Z ddlmZ ddlZddlZddlmZmZm	Z	 ddl
mZ ddlmZmZmZmZmZ ddlmZ dd	lmZmZmZmZmZmZmZmZmZmZ eez  Z G d
 d          Z dS )z2CloudKit record mappers for the Reminders service.    )annotationsN)AnyCallableOptional)CKRecord   )
_as_raw_id_decode_attachment_url_decode_cloudkit_text_value_decode_crdt_document	_ref_name)RemindersApiError)
AlarmHashtagImageAttachmentLocationTrigger	ProximityRecurrenceFrequencyRecurrenceRuleReminderRemindersListURLAttachmentc                  z    e Zd ZdZd%dZed&d            Zd'dZd(dZd)dZ	d*dZ
d+dZd,dZd-dZd.d!Zd/d#Zd$S )0RemindersRecordMapperz8Translate CloudKit records into Reminders domain models.get_rawCallable[[], Any]loggerlogging.LoggerreturnNonec                "    || _         || _        d S )N)_get_raw_logger)selfr   r   s      l/home/thesage/.hermes/hermes-agent/venv/lib/python3.11/site-packages/pyicloud/services/reminders/_mappers.py__init__zRemindersRecordMapper.__init__&   s    
      payload_textstrsource	list[str]c                   	 t          j        |           }n1# t          t          f$ r}t	          d| || d          |d}~ww xY wt          |t                    st	          | d||d          g }|D ]Q}t          |t                    st	          | d||d          |                    t          |d                     R|S )z<Decode a JSON array of reminder IDs into normalized raw IDs.zFailed to parse )r*   payloadr-   Nz must decode to a JSON arrayz& must contain only string reminder IDsr   )
_jsonloads
ValueError	TypeErrorr   
isinstancelistr)   appendr	   )r(   r*   r-   excreminder_idsitems         r%   _parse_reminder_ids_payloadz1RemindersRecordMapper._parse_reminder_ids_payload.   s/   	k,//GGI& 	 	 	#+6++#)lCC   	 '4(( 	#777#)g>>   
 #% 	> 	>DdC(( 'EEE'-'BB    
4 < <====s    AA  Arecr   c                   |j         }|                    d          }|_t          |t                    s+t	          d|j        t          |          j        d          |                     |d|j         d          S |                    d          }|g S t          |d	d          }|[t          |d
d          }|s!t	          d|j         dd|j        i          | 
                                                    |          }	 |                    d          }n4# t          $ r'}t	          d|j         dd|j        i          |d}~ww xY w|                     |d|j         d          S )zALoad reminder membership from inline or asset-backed list fields.ReminderIDsNz%ReminderIDs field had unexpected type)
recordNametyper.   zList z ReminderIDsReminderIDsAssetdownloadedDatadownloadURLz1 ReminderIDsAsset is missing data and downloadURLr=   utf-8z% ReminderIDsAsset was not valid UTF-8z ReminderIDsAsset)fields	get_valuer3   r)   r   r=   r>   __name__r9   getattrr"   download_asset_bytesdecodeUnicodeDecodeError)	r$   r:   rC   reminder_ids_rawassetasset_bytesdownload_urlr(   r6   s	            r%   _reminder_ids_for_list_recordz3RemindersRecordMapper._reminder_ids_for_list_recordJ   s   !++M::'.44 ';&)n $%5 6 6 ?     33 4444  
   !344=Ie%5t<<"5->>L ']CN]]])3>:    --//>>|LLK	&--g66LL! 	 	 	#MMMM%s~6   	 //5CN555
 
 	
s   D 
E&"EEvaluer   
field_namerecord_namec                   	 t          |          S # t          $ r6 | j                            d||           |                    dd          cY S w xY w)zCNormalize CloudKit text-like values into ``str`` for domain models.z=Field %s on %s was undecodable bytes; replacing invalid UTF-8rB   replace)errors)r   rI   r#   warningrH   )r$   rO   rP   rQ   s       r%   _coerce_textz"RemindersRecordMapper._coerce_textw   sq    	;.u555! 	; 	; 	;L  O  
 <<	<:::::	;s    =AAr   c                $   |j         }|                    d          }|                    d          }|                     |          }|                    d          }|t          |          nd}|dk    r|rt	          |          }t          |j        |rt          |          nd|rt          |          nd ||                    d          |                    d          t          |                    d          pd          ||j	        		  	        S )
NNameColorCountr   UntitledBadgeEmblemSortingStyleIsGroup)	idtitlecolorcountbadge_emblemsorting_styleis_groupr7   record_change_tag)
rC   rD   rN   intlenr   r=   r)   boolrecordChangeTag)r$   r:   rC   r`   ra   r7   	raw_countrb   s           r%   record_to_listz$RemindersRecordMapper.record_to_list   s     ((  ))99#>>$$W--	"+"7IQA::,: %%E~ %5#e***: %/#e***4))-88 **>::&**955:;;%!1

 

 

 
	
r'   r   c           
     v   |j         }|                    d          }||j        |j        j        }|                    d          }||j        |j        j        }|                    d          }d}|rf	 |                     t          |          d|j                  }n:# t          $ r-}| j	        
                    d|j        |           d}Y d }~nd }~ww xY w|                    d          }d	}	|rd	 |                     t          |          d|j                  }	n8# t          $ r+}| j	        
                    d
|j        |           Y d }~nd }~ww xY wt          d4i d|j        dt          |d          d|d|	d|                    d          d|                    d          dt          |                    d          pd          d|                    d          dt          |                    d          pd          dt          |                    d          pd          dt          |                    d          pd          dt          |                    d           pd          d!|                    d"          d#d$ |                    d%          pg D             d&d' |                    d(          pg D             d)d* |                    d+          pg D             d,d- |                    d.          pg D             d/t          |d0          pd d1|d2|d3|j        S )5NCreationDateLastModifiedDateTitleDocumentr[   rP   rQ   z&TitleDocument decode failed for %s: %szError Decoding TitleNotesDocument z&NotesDocument decode failed for %s: %sr_   list_idListr`   descdue_dateDueDate
start_date	StartDate	completed	Completedr   completed_dateCompletionDatepriorityPriorityflaggedFlaggedall_dayAllDaydeletedDeleted	time_zoneTimeZone	alarm_idsc                .    g | ]}t          |d           S )r   r	   .0xs     r%   
<listcomp>z<RemindersRecordMapper.record_to_reminder.<locals>.<listcomp>   s/       +,
1g&&  r'   AlarmIDshashtag_idsc                .    g | ]}t          |d           S )r   r   r   s     r%   r   z<RemindersRecordMapper.record_to_reminder.<locals>.<listcomp>   s/       -.
1i((  r'   
HashtagIDsattachment_idsc                .    g | ]}t          |d           S )
Attachmentr   r   s     r%   r   z<RemindersRecordMapper.record_to_reminder.<locals>.<listcomp>   s2        1l++  r'   AttachmentIDsrecurrence_rule_idsc                .    g | ]}t          |d           S )r   r   r   s     r%   r   z<RemindersRecordMapper.record_to_reminder.<locals>.<listcomp>   s3     ! ! ! 1.//! ! !r'   RecurrenceRuleIDsparent_reminder_idParentRemindercreatedmodifiedrf    )rC   rD   r   	timestampr   rV   r   r=   	Exceptionr#   rU   r   r   ri   rg   rj   )
r$   r:   rC   r   r   	title_docr`   r6   	notes_docrv   s
             r%   record_to_reminderz(RemindersRecordMapper.record_to_reminder   sn   "">22?s{6k+G##$677 8|-H$$_55	 	//))))44. # *  
  / / /$$<N  
 // $$_55	 	(())44. # )  
    $$<N          
  
  
~~ 
ff--- 
 % 
 	 

 %%i000 
 ''444 
 6++K88=A>>> 
 "++,<=== 
 ))*55:;;; 
 )))449::: 
 ))(338q999 
 )))449::: 
 &&z222 
 171A1A*1M1M1SQS    
" 393C3CL3Q3Q3WUW   # 
(  **?;;Ar   ) 
0! ! **+>??E2! ! ! !1 
8  )1ABBJd9 
: G; 
< X= 
> "11? 
  	
s0   6*B! !
C+#CC5*D   
E*!EEr   c                    |j         }t          |j        |                    d          pdt	          |d          |                    d          pd|j                  S )NAlarmUIDrs   r   	TriggerID)r_   	alarm_uidreminder_id
trigger_idrf   )rC   r   r=   rD   r   rj   r$   r:   rC   s      r%   record_to_alarmz%RemindersRecordMapper.record_to_alarm   sd    ~&&z228b!&*55''44:!1
 
 
 	
r'   Optional[LocationTrigger]c                &   |j         }|                    d          pd}t          |d          }|dk    r:t          |                    d          pd          }	 t	          |          }n=# t
          $ r0 | j                            d||j                   t          j	        }Y nw xY wt          |j        ||                    d          pd|                    d	          pdt          |                    d
          pd          t          |                    d          pd          t          |                    d          pd          ||                    d          pd|j        
  
        S | j                            d||j                   d S )NTypers   r   Locationr   r   zUnknown Proximity %d on %sTitleAddressLatitudeg        	LongitudeRadiusLocationUID)
r_   alarm_idr`   addresslatitude	longituderadius	proximitylocation_uidrf   z(Unsupported AlarmTrigger type '%s' on %s)rC   rD   r   rg   r   r1   r#   rU   r=   ARRIVINGr   floatrj   )r$   r:   rC   trigger_typer   prox_rawr   s          r%   record_to_alarm_triggerz-RemindersRecordMapper.record_to_alarm_trigger   s   ''//52VW--:%%6++K88=A>>H/%h//		 / / /$$0N  
 &.			/ #>!&&w//52((339rv//
;;BsCC 0 0 = = DEEV--h77>3??##--m<<B"%"5    	6N	
 	
 	

 ts   A+ +7B%$B%Optional[Attachment]c                .   |j         }|                    d          pd}t          |d          }|dk    rUt          |j        |t          |                    d          pd          |                    d          pd|j                  S |dk    r|                    d	          }d}|rt          |d
          r	|j        pd}t          |j        |||                    d          pdt          |                    d          pd          t          |                    d          pd          t          |                    d          pd          |                    d          pd|j        	  	        S | j                            d||j                   d S )Nr   rs   r   URLUTIz
public.url)r_   r   urlutirf   Image	FileAssetrA   FileNameFileSizer   WidthHeightzpublic.jpeg)	r_   r   file_asset_urlfilename	file_sizewidthheightr   rf   z"Unknown Attachment type '%s' on %s)rC   rD   r   r   r=   r
   rj   hasattrrA   r   rg   r#   rU   )r$   r:   rC   att_typer   
file_assetrM   s          r%   record_to_attachmentz*RemindersRecordMapper.record_to_attachment  s   ##F++1r
33u >'*6+;+;E+B+B+HbII$$U++;|"%"5    w))+66JL <gj-@@ <)5;">'+))*55;f..z::?a@@&**7338q996++H55:;;$$U++<}"%"5
 
 
 
 	0N	
 	
 	

 tr'   r   c                    |j         }t          |j        |                     |                    d          d|j                  t          |d          |                    d          |j                  S )NrX   rq   r   rn   )r_   namer   r   rf   )rC   r   r=   rV   rD   r   rj   r   s      r%   record_to_hashtagz'RemindersRecordMapper.record_to_hashtag>  s|    ~""  ((!N #  
 "&*55$$^44!1

 

 

 
	
r'   r   c           
     r   |j         }|                    d          pd}	 t          |          }n# t          $ r t          j        }Y nw xY wt          |j        t          |d          ||                    d          pd|                    d          pd|                    d          pd|j                  S )	N	Frequencyr   r   IntervalOccurrenceCountr   FirstDayOfTheWeek)r_   r   	frequencyintervaloccurrence_countfirst_day_of_weekrf   )	rC   rD   r   r1   DAILYr   r=   r   rj   )r$   r:   rC   freq_rawfreqs        r%   record_to_recurrence_rulez/RemindersRecordMapper.record_to_recurrence_ruleL  s    ##K005A	-&x00DD 	- 	- 	-&,DDD	-~!&*55%%j116Q#--.?@@EA$../BCCHq!1
 
 
 	
s   0 A	A	N)r   r   r   r   r   r    )r(   r)   r*   r)   r   r+   )r:   r   r   r+   )rO   r   rP   r)   rQ   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   )rE   
__module____qualname____doc__r&   staticmethodr9   rN   rV   rl   r   r   r   r   r   r   r   r'   r%   r   r   #   s
       BB       \6+
 +
 +
 +
Z
; 
; 
; 
;
 
 
 
0K
 K
 K
 K
Z
 
 
 
# # # #J% % % %N
 
 
 

 
 
 
 
 
r'   r   )!r   
__future__r   jsonr/   loggingtypingr   r   r   pyicloud.common.cloudkitr   	_protocolr	   r
   r   r   r   clientr   modelsr   r   r   r   r   r   r   r   r   r   r   r   r   r'   r%   <module>r      s|   8 8 " " " " " "      * * * * * * * * * * - - - - - -              & % % % % %                        _,
x
 x
 x
 x
 x
 x
 x
 x
 x
 x
r'   