
    `gj;                       d Z ddlmZ ddlmZmZ ddlmZmZ ddlm	Z	m
Z
 e
d   ZddZddZdd	Ze G d
 d             Ze G d d             Ze G d d             Ze G d d             Ze G d d             Zg dZy)z8Normalized models for the Teams meeting pipeline plugin.    )annotations)	dataclassfield)datetimetimezone)AnyLiteral)
transcript	recordingcall_recordc                   | t        | t              r| S t        |       j                         }|sy |j	                  d      r|d d  d}t        j
                  |      }|j                   |j                  t        j                        S |S )NZ+00:00)tzinfo)

isinstancer   strstripendswithfromisoformatr   replacer   utc)valuetextparseds      P/root/.hermes/venv/lib/python3.12/site-packages/plugins/teams_pipeline/models.py_parse_datetimer      s    }
5(3u:D}}Ss)F###D)F}}~~X\\~22M    c                    | y | j                  t        j                        }|j                         j	                  dd      S )Nr   r   )
astimezoner   r   	isoformatr   )r   
normalizeds     r   _serialize_datetimer#      s:    }!!(,,/J!))(C88r   c                \    | j                         D ci c]  \  }}|	|| c}}S c c}}w N)items)valueskeyr   s      r   _clean_dictr)   "   s)    )/M:35;LCJMMMs   
((c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   dZd	ed
<   dZded<   dZd	ed<   ddZedd       Z	ddZ
y)GraphSubscriptionr   subscription_idresourcechange_typenotification_urlr   expiration_datetimeN
str | Noneclient_statedatetime | Nonelatest_renewal_atstatusc                   | j                   j                         st        d      | j                  j                         st        d      | j                  j                         st        d      | j
                  j                         st        d      t        | j                        | _        t        | j                        | _        | j                  t        d      y )Nz.GraphSubscription.subscription_id is required.z'GraphSubscription.resource is required.z*GraphSubscription.change_type is required.z/GraphSubscription.notification_url is required.z2GraphSubscription.expiration_datetime is required.)	r,   r   
ValueErrorr-   r.   r/   r   r0   r4   selfs    r   __post_init__zGraphSubscription.__post_init__1   s    ##))+MNN}}""$FGG%%'IJJ$$**,NOO#243K3K#L !01G1G!H##+QRR ,r   c                    | t        |j                  d      xs |j                  d      xs d      j                         t        |j                  d      xs d      j                         t        |j                  d      xs |j                  d      xs d      j                         t        |j                  d      xs |j                  d      xs d      j                         |j                  d	      xs |j                  d
      |j                  d      xs |j                  d      |j                  d      xs |j                  d      |j                  d            S )Nr,   id r-   r.   
changeTyper/   notificationUrlr0   expirationDateTimer2   clientStater4   latestRenewalAtr5   r,   r-   r.   r/   r0   r2   r4   r5   )r   getr   clspayloads     r   	from_dictzGraphSubscription.from_dict?   s   ,= > Y'++dBS YWYZ``bZ06B7==?GKK6Y'++l:SYWYZ``b ./W7;;?P3QWUWeg ',A B !1{{/0 ^4RM8R%kk*=>`'++N_B`;;x(
 	
r   c                    t        | j                  | j                  | j                  | j                  t        | j                        | j                  t        | j                        | j                  d      S )NrC   )
r)   r,   r-   r.   r/   r#   r0   r2   r4   r5   r8   s    r   to_dictzGraphSubscription.to_dictO   sb    #'#7#7 MM#//$($9$9':4;S;S'T $ 1 1%89O9O%P++	
 	
r   returnNone)rG   dict[str, Any]rL   z'GraphSubscription'rL   rN   )__name__
__module____qualname____annotations__r2   r4   r5   r:   classmethodrH   rJ    r   r   r+   r+   &   s]    M!!#L*#)--FJS 
 

r   r+   c                      e Zd ZU ded<   dZded<   dZded<   dZded<   dZded<   dZded	<    e	e

      Zded<   ddZedd       ZddZy)TeamsMeetingRefr   
meeting_idNr1   organizer_user_idjoin_web_urlcalendar_event_id	thread_id	tenant_iddefault_factoryrN   metadatac                N    | j                   j                         st        d      y )Nz'TeamsMeetingRef.meeting_id is required.)rX   r   r7   r8   s    r   r:   zTeamsMeetingRef.__post_init__h   s#    $$&FGG 'r   c                &    | t        |j                  d      xs |j                  d      xs d      j                         |j                  d      xs |j                  d      |j                  d      xs |j                  d      |j                  d      xs |j                  d	      |j                  d
      xs |j                  d      |j                  d      xs |j                  d      t        |j                  d      xs i             S )NrX   r<   r=   rY   organizerUserIdrZ   
joinWebUrlr[   calendarEventIdr\   threadIdr]   tenantIdr`   rX   rY   rZ   r[   r\   r]   r`   )r   rD   r   dictrE   s     r   rH   zTeamsMeetingRef.from_dictl   s    7;;|4OD8IORPVVX%kk*=>`'++N_B` ^4QL8Q%kk*=>`'++N_B`kk+.I'++j2Ikk+.I'++j2I'++j17R8
 	
r   c           
         t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  xs d d      S )Nrh   )r)   rX   rY   rZ   r[   r\   r]   r`   r8   s    r   rJ   zTeamsMeetingRef.to_dictx   sP    "oo%)%;%; $ 1 1%)%;%;!^^!^^ MM1T

 
	
r   rK   )rG   rN   rL   z'TeamsMeetingRef'rO   )rP   rQ   rR   rS   rY   rZ   r[   r\   r]   r   ri   r`   r:   rT   rH   rJ   rU   r   r   rW   rW   ^   si    O$(z(#L*#$(z( Iz  Iz $T:Hn:H 	
 	

r   rW   c                      e Zd ZU ded<   ded<   dZded<   dZded<   dZded	<   dZded
<   dZded<   dZ	ded<   dZ
ded<    ee      Zded<   ddZedd       ZddZy)MeetingArtifactArtifactTypeartifact_typer   artifact_idNr1   display_namecontent_type
source_urldownload_urlr3   
created_atavailable_atz
int | None
size_bytesr^   rN   r`   c                6   | j                   dvrt        d      | j                  j                         st        d      t	        | j
                        | _        t	        | j                        | _        | j                  t        | j                        | _        y y )N>   r   r
   r   zLMeetingArtifact.artifact_type must be transcript, recording, or call_record.z(MeetingArtifact.artifact_id is required.)	rn   r7   ro   r   r   rt   ru   rv   intr8   s    r   r:   zMeetingArtifact.__post_init__   s    %OO^  %%'GHH)$//:+D,=,=>??&!$//2DO 'r   c                    | |j                  d      xs |j                  d      t        |j                  d      xs |j                  d      xs d      j                         |j                  d      xs$ |j                  d      xs |j                  d      |j                  d	      xs |j                  d
      |j                  d      xs$ |j                  d      xs |j                  d      |j                  d      xs$ |j                  d      xs |j                  d      |j                  d      xs |j                  d      |j                  d      xs$ |j                  d      xs |j                  d      |j                  d      xs |j                  d      t        |j                  d      xs i       
      S )Nrn   artifactTypero   r<   r=   rp   displayNamenamerq   contentTyperr   	sourceUrlwebUrlrs   downloadUrlz@microsoft.graph.downloadUrlrt   createdDateTimeru   availableDateTimelastModifiedDateTimerv   sizer`   
rn   ro   rp   rq   rr   rs   rt   ru   rv   r`   )rD   r   r   ri   rE   s     r   rH   zMeetingArtifact.from_dict   st   !++o6U'++n:UGKK6Q'++d:KQrRXXZ ^4 #{{=)#{{6" ^4RM8R{{<0eGKK4LePWP[P[\dPe ^4 ;{{=);{{9:{{<0RGKK@Q4R ^4 3{{./3{{12{{<0GGKK4G'++j17R8!
 	
r   c                "   t        | j                  | j                  | j                  | j                  | j
                  | j                  t        | j                        t        | j                        | j                  | j                  xs d d
      S )Nr   )r)   rn   ro   rp   rq   rr   rs   r#   rt   ru   rv   r`   r8   s    r   rJ   zMeetingArtifact.to_dict   su    !%!3!3#// $ 1 1 $ 1 1"oo $ 1 11$//B 3D4E4E F"oo MM1T
 	
r   rK   )rG   rN   rL   z'MeetingArtifact'rO   )rP   rQ   rR   rS   rp   rq   rr   rs   rt   ru   rv   r   ri   r`   r:   rT   rH   rJ   rU   r   r   rl   rl      s    #L*##L*#!J
!#L*#"&J&$(L/(!J
!$T:Hn:
3 
 
(
r   rl   c                  n   e Zd ZU ded<   dZded<   dZded<   dZded<    ee	      Z	d
ed<   dZ
ded<   dZded<    ee	      Zd
ed<    ee	      Zd
ed<    ee	      Zd
ed<    ee	      Zded<    ee	      Zded<   dZded<   dZded<   dZded<   dZded<   dZded<   ddZedd       ZddZy) TeamsMeetingSummaryPayloadrW   meeting_refNr1   titler3   
start_timeend_timer^   z	list[str]participantstranscript_textsummarykey_decisionsaction_itemsrisksrN   call_metricszlist[MeetingArtifact]source_artifacts
confidenceconfidence_notesnotion_targetlinear_targetteams_targetc                l    t        | j                        | _        t        | j                        | _        y r%   )r   r   r   r8   s    r   r:   z(TeamsMeetingSummaryPayload.__post_init__   s"    )$//:'6r   c                    | di dt         j                  |d         d|j                  d      d|j                  d      xs |j                  d      d|j                  d      xs |j                  d      dt        |j                  d      xs g       d|j                  d      xs |j                  d	      d
|j                  d
      dt        |j                  d      xs |j                  d      xs g       dt        |j                  d      xs |j                  d      xs g       dt        |j                  d      xs g       dt	        |j                  d      xs |j                  d      xs i       d|j                  dg       D cg c]  }t
        j                  |       c}d|j                  d      d|j                  d      xs |j                  d      d|j                  d      xs |j                  d      d|j                  d      xs |j                  d      d|j                  d      xs |j                  d      S c c}w )Nr   r   r   	startTimer   endTimer   r   transcriptTextr   r   keyDecisionsr   actionItemsr   r   callMetricsr   r   r   confidenceNotesr   notionTargetr   linearTargetr   teamsTargetrU   )rW   rH   rD   listri   rl   )rF   rG   items      r   rH   z$TeamsMeetingSummaryPayload.from_dict   sF    
'11'-2HI
++g&
 {{<0LGKK4L
 [[,FI0F	

 gkk.9?R@
 $KK(9:[gkkJZ>[
 KK	*
 w{{?;`w{{>?Z`^`a
 gkk.9]W[[=W][]^
 w{{7+1r2
 gkk.9]W[[=W][]^
 =DKKHZ\^<_48))$/
 {{<0
  %[[);<^L]@^!
" "++o6U'++n:U#
$ "++o6U'++n:U%
& !^4RM8R'
 	
s   I!c           	        t        i d| j                  j                         d| j                  dt	        | j
                        dt	        | j                        d| j                  xs d d| j                  d| j                  d| j                  xs d d	| j                  xs d d
| j                  xs d d| j                  xs d d| j                  D cg c]  }|j                          c}xs d d| j                  d| j                   d| j"                  d| j$                  d| j&                        S c c}w )Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r)   r   rJ   r   r#   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r9   artifacts     r   rJ   z"TeamsMeetingSummaryPayload.to_dict   s   t//779 1$//B />	
  1 1 9T "4#7#7 4<<  !3!3!;t  1 1 9T +t  1 1 9T #H]H]$^HX%5%5%7$^ % doo #D$9$9   !3!3!"  !3!3#$  1 1%
 	
 %_s   D=rK   )rG   rN   rL   z'TeamsMeetingSummaryPayload'rO   )rP   rQ   rR   rS   r   r   r   r   r   r   r   r   r   r   r   ri   r   r   r   r   r   r   r   r:   rT   rH   rJ   rU   r   r   r   r      s      E:"&J& $Ho$#D9L)9"&OZ&GZ$T:M9:#D9L)9T2E92#(#>L.>.3D.I+I!J
!#'j' $M:$ $M:$#L*#7 
 
.
r   r   c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   dZded	<   d
Zded<   d
Zded<   d
Zded<   d
Zded<   d
Z	ded<    e
e      Zded<   ddZedd       ZddZy
)TeamsMeetingPipelineJobr   job_idevent_idsource_event_type
dedupe_keyr5   r   rx   retry_countNr3   rt   
updated_atzTeamsMeetingRef | Noner   r1   selected_artifact_strategyz!TeamsMeetingSummaryPayload | Nonesummary_payloadr^   rN   
error_infoc                   | j                   j                         st        d      | j                  j                         st        d      | j                  j                         st        d      | j
                  j                         st        d      | j                  j                         st        d      t        | j                        | _        t        | j                        | _
        t        | j                        | _        y )Nz+TeamsMeetingPipelineJob.job_id is required.z-TeamsMeetingPipelineJob.event_id is required.z6TeamsMeetingPipelineJob.source_event_type is required.z/TeamsMeetingPipelineJob.dedupe_key is required.z+TeamsMeetingPipelineJob.status is required.)r   r   r7   r   r   r   r5   rx   r   r   rt   r   r8   s    r   r:   z%TeamsMeetingPipelineJob.__post_init__  s    {{  "JKK}}""$LMM%%++-UVV$$&NOO{{  "JKKt//0)$//:)$//:r   c                   |j                  d      xs |j                  d      }|j                  d      xs |j                  d      } | t        |j                  d      xs |j                  d      xs d      j                         t        |j                  d      xs |j                  d	      xs d      j                         t        |j                  d
      xs |j                  d      xs d      j                         t        |j                  d      xs |j                  d      xs d      j                         t        |j                  d      xs d      j                         |j                  d      xs |j                  d      xs d|j                  d      xs |j                  d      |j                  d      xs |j                  d      |rt        j	                  |      nd |j                  d      xs |j                  d      |rt
        j	                  |      nd t        |j                  d      xs |j                  d      xs i             S )Nr   
meetingRefr   summaryPayloadr   jobIdr=   r   eventIdr   sourceEventTyper   	dedupeKeyr5   r   
retryCountr   rt   	createdAtr   	updatedAtr   selectedArtifactStrategyr   	errorInfor   r   r   r   r5   r   rt   r   r   r   r   r   )rD   r   r   rW   rH   r   ri   )rF   rG   meeting_ref_payloadr   s       r   rH   z!TeamsMeetingPipelineJob.from_dict,  s   %kk-8UGKK<U!++&78YGKKHX<Yw{{8,JG0DJKQQSZ0PGKK	4JPbQWWY!/0XGKK@Q4RXVXeg7;;|4VK8PVTVW]]_w{{8,2399;M2Tgkk,6OTST{{<0LGKK4L{{<0LGKK4LJ]112EFcg'.{{3O'P (7{{56 7@@QGKK5W[9QWUWX#
 	
r   c                   t        | j                  | j                  | j                  | j                  | j
                  | j                  t        | j                        t        | j                        | j                  r| j                  j                         nd | j                  | j                  r| j                  j                         nd | j                  xs d d      S )Nr   )r)   r   r   r   r   r5   r   r#   rt   r   r   rJ   r   r   r   r8   s    r   rJ   zTeamsMeetingPipelineJob.to_dictD  s    ++ MM%)%;%;"oo++#//1$//B1$//B=A=M=Mt//779SW.2.M.MEIEYEY4#7#7#?#?#A_c"oo5
 	
r   rK   )rG   rN   rL   z'TeamsMeetingPipelineJob'rO   )rP   rQ   rR   rS   r   rt   r   r   r   r   r   ri   r   r:   rT   rH   rJ   rU   r   r   r   r     s    KMOKK"&J&"&J&*.K'.-1
19=O6=!&t!<J<; 
 
.
r   r   )rm   r+   rl   r   rW   r   N)r   r   rL   r3   )r   r3   rL   r1   )r'   rN   rL   rN   )__doc__
__future__r   dataclassesr   r   r   r   typingr   r	   rm   r   r#   r)   r+   rW   rl   r   r   __all__rU   r   r   <module>r      s    > " ( '  ?@9N 4
 4
 4
n $
 $
 $
N ;
 ;
 ;
| E
 E
 E
P E
 E
 E
Pr   