
    ]j#              
         d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Zd dlmZ  ee                                          j        d         Zedz  ZdZd$dZd%dZd&dZd'd(dZd)dZd*dZd+dZedk    rw	  ej         e                       dS # e$ rTZ e ej        dd e e          j         d e d!d"          ej!        #            ej        d           Y dZ[dS dZ[ww xY wdS ),    )annotationsN)Path   zscript/project-manifest.jsonzhttp://192.168.1.104:8023pathr   returnstrc                   t          j                    }|                     d          5 t          fdd          D ]}|                    |           	 d d d            n# 1 swxY w Y   |                                S )Nrbc                 .                          d          S )Ni   )read)handles   script/run-final-job.py<lambda>zsha256.<locals>.<lambda>   s    &++o">">     r   )hashlibsha256openiterupdate	hexdigest)r   digestchunkr   s      @r   r   r      s    ^F	4 !F>>>>DD 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   ,A##A'*A'manifestdictkeyc                   |                      d          pi                      |          }t          |t                    r|st          d|           t	          |          }|                                s
t          |z  }|                                                    t                                                     |S )Nactive_pathszmissing active_paths.)	get
isinstancer   RuntimeErrorr   is_absoluteROOTresolverelative_to)r   r   valuer   s       r   r#   r#      s    \\.))/R44S99EeS!! : :8388999;;D d{LLNNt||~~...Kr   r%   Nonec                   | j                             dd           t          j        |dd          dz                       d          }t          j        | j         d| j         dd	
          \  }}	 t          j	        |d          5 }|
                    |           |                                 t          j        |                                           d d d            n# 1 swxY w Y   t          j        ||            t          j                            |          rt          j        |           d S d S # t          j                            |          rt          j        |           w w xY w)NT)parentsexist_okF   )ensure_asciiindent
utf-8.z.tmp)dirprefixsuffixwb)parentmkdirjsondumpsencodetempfilemkstempnameosfdopenwriteflushfsyncfilenoreplacer   existsunlink)r   r%   datafdr;   r   s         r   atomic_jsonrG   '   s   KdT222Ju5;;;dBJJ7SSDDK8HDI8H8H8HQWXXXHBYr4   	&FLLLLNNNHV]]__%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	
47>>$ 	IdOOOOO	 	27>>$ 	IdOOOO	s1   3D; AC$D; $C((D; +C(,D; ;6E1urlpayloaddict | Nonec                   |)t          j        |d                              d          nd }t          j                            | ||rddini |rdnd          }t          j                            |d	
          5 }t          j        |                                	                    d                    cd d d            S # 1 swxY w Y   d S )NFr+   r.   zContent-Typezapplication/jsonPOSTGET)rE   headersmethod<   )timeout)
r6   r7   r8   urllibrequestRequesturlopenloadsr   decode)rH   rI   rE   rT   responses        r   request_jsonrZ   6   s%   FMFY4:gE22299'BBB_cDn$$Stei=qnN`=a=aoq  EI  {T  {A  {A  OT$  U  UG					4	4 ;z(--//0099::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;s   <9CC	Cc                |    t          j        t          j        dddddddt	          |           gd	                    S )
Nffprobez-verrorz-show_entrieszSformat=duration,size:stream=codec_name,codec_type,width,height,sample_rate,channelsz-ofr6   T)text)r6   rW   
subprocesscheck_outputr   )r   s    r   probera   =   sM    :j-4/]vs4yy/ 	     r   probe_valuefloatc                r    t          |                     d          pi                     dd                    S )Nformatdurationr   )rc   r   )rb   s    r   rf   rf   E   s1    +//(++1r66z1EEFFFr   intc                     t          j        t                              d                    d} fd| D             }                    d          }i }dD ]}t          j        || d                             d                    }t          j        || d                             d                    }t          ||                   }|                    d	          d
k    sI|                    d          dus2|                    d          |k    s|                    d          |k    rt          | d          |                    d	          d
k    sI|                    d          dus2|                    d          |k    s|                    d          |k    rt          | d          t          ||                   |t          || d                   t          || d                   dt          || d                   t          || d                   dd||<   t          |d                   t          |d                   t          |d                   ddddddd	}|d         }	d }
|	                                rt          j        |	                    d                    }|                    d	          d
k    r&|                    d          du rt          d          |                    d	          d v r=|                    d!          |k    rt          d"          |                    d#          }
n)|d                                         rt          d$          |
t          t           d%|          }|                    d#          p|                    d&          }
t          |
t                    r|
st          d'|           t          |	|                    d	d(          d)||
|||t          j                            t          j        j                                                  d*           	 t          t           d+|
           }|                    d	          }|d v rt          j        |	                    d                    }|                    |d)|t          j                            t          j        j                                                  d,           t          |	|           t'          j        d-           |d
k    rt          j        |	                    d                    }|                    |pd.d)|t          j                            t          j        j                                                  d/           t          |	|           t          d0|           	 |                    d1          pi }t+          |                    d2d3                    }t-          |d                   }t-          |d                   }t-          |d                   }|                    d4g           }d5 |D             }d6 |D             }t/          |          t/          |          z   }t/          |          }|                    d          du ||d         k    |d                                         o"|d                                         j        d7k    t7          |          d8k    o|d7                             d9          d:k    t7          |          d8k    o|d7                             d9          d;k    t7          |          d8k    o=|d7                             d<          dk    o|d7                             d=          dk    t7          |          d8k    o|d7                             d>          d?k    t9          ||z
            d@k    dA|vdB	}t;          |                                          }i d	|rd
nd.d|d|dCdDd#|
d!|dE|dF|dGt          |d                   dt          |d                   dH|d                                         j        dI|dJt/          |          t/          |          ||dKdL|dM|dNdO |                                D             dPt          j                            t          j        j                                                  }t          |	|           tA          t          j!        |d	         ||
||d         |dH         t          |	          dQd)R                     |rd7nd8S )SNr.   )encoding)introintro_receiptintro_qa_receiptfootagefootage_receiptfootage_qa_receiptfinal_masterfinal_receiptc                2    i | ]}|t          |          S  )r#   ).0r   projects     r   
<dictcomp>zmain.<locals>.<dictcomp>L   s%    888CS''3''888r   canon_sha256)rj   rm   _receipt_qa_receiptstatus	completedverifiedTsource_canon_sha256artifact_sha256z( render receipt absent, failed, or stalevideo_sha256z# visual QA absent, failed, or stale)r   r   )r   r   render_receiptvisual_receiptrj   rm   rp      i  i8  
h264_nvencp4   )	intro_video_pathfootage_video_pathoutput_video_pathfpswidthheightvideo_encoderpresetcqrq   z*final already completed and requires audit>   queuedrunning	submittedrT   z"existing final job payload differsjob_idz#final output exists without receiptz/v1/huyenan-render-final/jobsidzsubmit response lacks job id: r   F)rz   r|   r}   r   rT   input_artifactssubmit_responsesubmitted_atz/v1/huyenan-render-final/jobs/)rz   r|   last_job_response
updated_at   failed)rz   r|   terminal_job_response	failed_atzfinal job terminal failure: verificationoutput streamsc                D    g | ]}|                     d           dk    |S )
codec_typevideor   rt   items     r   
<listcomp>zmain.<locals>.<listcomp>   .    LLLt$((<*@*@G*K*Kd*K*K*Kr   c                D    g | ]}|                     d           dk    |S )r   audior   r   s     r   r   zmain.<locals>.<listcomp>   r   r   r   r   
codec_nameh264aacr   r   sample_rate48000g:m?main_audio_path)	endpoint_verifiedoutput_exactoutput_existsone_h264_videoone_aac_audio
resolutionaudio_48000duration_summain_audio_not_sentstagefinalr   r   output_pathbytesduration_secondsduration_basis)rj   rm   expected_sumr   endpoint_verificationindependent_probechecksc                     i | ]\  }}|||d S ))r|   r%   rs   )rt   r   r%   s      r   rv   zmain.<locals>.<dictcomp>   s&    ]]]
U3UU;;]]]r   completed_at)rz   r|   r   r   r~   r   receiptrL   )"r6   rW   MANIFEST	read_textr   r   r    r   rC   rZ   BASEr   rG   datetimenowtimezoneutc	isoformatr   timesleepr   ra   rf   is_filestatst_sizelenabsallvaluesitemsprintr7   )keyspathscanoninputsr   rendervisual
video_hashrI   receipt_pathr   priorrY   jobrz   currentr   r   final_probeintro_probefootage_prober   videosaudiosexpected_durationactual_durationr   r|   r   ru   s                                @r   mainr   I   s
   j++W+==>>G OD88884888EKK''EF% 
 
EU"4"4"45???QQRREU"7"7"78BBGBTTUUE%L))
::h;..&**Z2H2HPT2T2TX^XbXbcxXyXy  ~C  YC  YC  GM  GQ  GQ  Rc  Gd  Gd  hr  Gr  Gr%QQQRRR::h;..&**Z2H2HPT2T2TX^XbXbcxXyXy  ~C  YC  YC  GM  GQ  GQ  R`  Ga  Ga  eo  Go  Go%LLLMMMe%%'*5E1C1C1C+D'E'EQWX]af^p^p^pXqQrQrss'*5E1F1F1F+G'H'HTZ[`diavavav[wTxTxyy
 
u  g//!%	"233 ~!677%
 
G )LF 	B
<1171CCDD99X+--%))J2G2G42O2OKLLL99X"DDDyy##w.."#GHHHYYx((F	~		%	%	'	' B@AAA~4 F F FPPh''=8<<+=+=&#&& 	Lf 	LJJJKKKLll8[99u#(Fw%($-11(2C2GHHRRTT	#
 #
 	 	 	dJJ&JJKK""777j!7!7!7!I!IJJGNNf%VYiqizi~i~  @H  @Q  @U  jV  jV  j`  j`  jb  jb  c  c  d  d  dg...JqMMM[  j!7!7!7!I!IJJGNNf&8efi  yA  yJ  yN  yN  OW  O`  Od  ye  ye  yo  yo  yq  yq  r  r  s  s  sg...FfFFGGG77>**0bL#''(B''((Fn-..Kg''K%	*++Mooi,,GLLwLLLFLLwLLLF --0G0GG{++O)--j99TA%"77~.6688eU>=R=W=W=Y=Y=ade=ef++*Tvay}}\/J/Jf/TV)RfQimmL.I.IU.R&kkQ&m6!9==+A+AT+ImfUVimm\dNeNeimNm6{{a'SF1IMM-,H,HG,SO.??@@NR0?
 
F 6==??##H
7++x
9CX
u
&-w
8@&
 	7
 .v
 8OPS
 	s5011	
 4EfUSaMbFcFc	

 	~&++--5

 8J?
 	H[$9$9h}F]F]  pA  M\  ]  ]
 	 
 0CK
 	]]fllnn]]]
 	)--h.?.CDDNNPP
G g&&&	$* 1xSYo~  T[  \m  Tn  y@  AH  yI  VY  Zf  Vg  Vg  h  h  w|  }  }  }  ~  ~  ~11ar   __main__r   Fz: )rz   r|   r]   rL   )file)r   r   r   r   )r   r   r   r   r   r   )r   r   r%   r   r   r&   )N)rH   r   rI   rJ   r   r   )r   r   r   r   )rb   r   r   rc   )r   rg   )"
__future__r   r   r   r6   r<   r_   sysr9   r   urllib.requestrS   pathlibr   __file__r#   r(   r"   r   r   r   rG   rZ   ra   rf   r   __name__exit	Exceptionexcr   r7   typestderrrs   r   r   <module>r      s!   " " " " " "    				     



            tH~~'*00"         ; ; ; ; ;   G G G Gk  k  k  k \ z   jdjH%TTRUYYM_JhJhcfJhJhiix}~~~  FI  FP  	Q  	Q  	Q  	Q s   B C7#A	C22C7