
    \Zjz                    0   d Z 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
mZ ddlmZmZ  ed                                          ZdZd=dZd>dZd?dZddd@dZdAdZdAdZdddddBd"ZdCd'ZdDd)ZdEdFd.ZdGd0ZdHd1Zd2d3dId9ZdJd<ZdS )KzKDependency-light runtime helpers for persistent StickerMan project scripts.    )annotationsN)Path)AnyIterablez/data/video-pipeline)SCRIPTMANIFESTTTSASRTIMELINECANARY	VISUAL_QAGPUBOUNDARYPACKAGEUPLOADRELEASE_AUDITCALENDARFINALpathr   valuer   returnNonec                   |                                  } | j                            dd           t          j        d| j         dd| j                  \  }}	 t          j        |dd          5 }t          j	        ||d	d
           |
                    d           |                                 t          j        |                                           d d d            n# 1 swxY w Y   t          j        ||            	 t          j        |           d S # t           $ r Y d S w xY w# 	 t          j        |           w # t           $ r Y w w xY wxY w)NT)parentsexist_ok.z.tmp)prefixsuffixdirwutf-8encodingF   )ensure_asciiindent
)resolveparentmkdirtempfilemkstempnameosfdopenjsondumpwriteflushfsyncfilenoreplaceunlinkFileNotFoundError)r   r   fd	temp_namehandles        o/data/video-pipeline/StickerMan/project/035-Vi-Sao-Vet-Thuong-Lai-Ngua-Khi-Dang-Lanh/scripts/project_runtime.pyatomic_write_jsonr=   #   s   <<>>DKdT222$,<	,<,<,<VQUQ\]]]MB	Yr3111 	&VIeV%BBBBLLLLNNNHV]]__%%%		& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&
 	
9d###	Ii       	 	 	DD		Ii      	 	 	D	sg   D- 1A(C%D- %C))D- ,C)-D- D 
D*)D*-E/EE
EEEE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)r;   s   r<   <lambda>zsha256_file.<locals>.<lambda>8   s    &++k":":     rD   )hashlibsha256openiterupdate	hexdigest)r   digestblockr;   s      @r<   sha256_filerM   5   s    ^F	4 !F::::C@@ 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   ,A##A'*A'c                
   |                                  }|                    t                     |dz  }|                                st	          d|           t          j        |                    d                    }t          |	                    d|                                                     }||k    rt	          d| d|           t          j        d|j                  st	          d	|j                   |S )
Nzproject.jsonzmissing project.json: r!   r"   project_pathzproject root mismatch: z != z
^[0-9]{3}-zinvalid numbered project root: )r(   relative_toSHARED_ROOTis_file
ValueErrorr0   loads	read_textr   getrematchr-   )r   rootconfig_pathconfig
configureds        r<   require_project_rootr]   =   s    <<>>D[!!!'K   :8$88999Z--w-??@@Ffjj6677??AAJTI:II4IIJJJ8M49-- HF49FFGGGKrD   F)
must_existrY   r^   boolc               :   |                                  }|                    |                                            |                    t                     |rC|                                r|                                j        dk    rt          d|           |S )Nr   zmissing or empty input: )r(   rP   rQ   rR   statst_sizerS   )r   rY   r^   resolveds       r<   require_beneathrd   L   s    ||~~H(((%%% @8++-- @1HA1M1M>H>>???OrD   c                "   	 t          j        t          |           d          5 }|                                dk    o|                                dk    cd d d            S # 1 swxY w Y   d S # t
          t          t           j        f$ r Y dS w xY w)Nr@   r   F)waverG   r>   getframerate
getnframesOSErrorEOFErrorError)r   r;   s     r<   	valid_wavrl   U   s    Ys4yy$'' 	I6&&((1,H1B1B1D1Dq1H	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	IXtz*   uus4   "A. 0A!A. !A%%A. (A%)A. .BBc                v   	 t          j        |                     d                    }t          |                    dd                    dk    o@t          |                    d                    ot          d |d         D                       S # t          t          t          t           j
        f$ r Y dS w xY w)Nr!   r"   durationr   segmentsc              3  Z   K   | ]&}t          |                    d                     V  'dS )wordsN)r_   rV   ).0segments     r<   	<genexpr>zvalid_asr.<locals>.<genexpr>c   s6      PP7DW--..PPPPPPrD   F)r0   rT   rU   floatrV   r_   anyri   rS   	TypeErrorJSONDecodeError)r   r   s     r<   	valid_asrry   ]   s    
4>>7>;;<<%))J**++a/ QUYYz**++QPPeJ>OPPPPP	

 ZD,@A   uus   BB "B87B8i   i@  i'  )	min_width
min_heightmin_sizerz   intr{   r|   c               L   	 |                                  }t          |          |k    s|d d         dk    rdS |dd         dk    s|dd         d	k    rdS t          j        d
|dd                   \  }}||k    o||k    S # t          t
          t          j        f$ r Y dS w xY w)N   s   PNG

F      s   IHDRis   IENDz>II   )
read_byteslenstructunpackri   rS   error)r   rz   r{   r|   datawidthheights          r<   	valid_pngr   i   s    	  t99  D!H0D$D$D52;'!!T"R%[G%;%;5eT"R%[99v	!:f
&::Z.   uus   5B B +B B#"B#itemsIterable[dict[str, Any]]path_key	list[int]c                $    fd| D             S )Nc                v    g | ]5} t          |                              t          |d                    6S )id)r   r}   )rr   itemr   	validators     r<   
<listcomp>zmissing_ids.<locals>.<listcomp>w   s>    UUUYYtDN?S?S5T5TUCT
OOUUUrD    )r   r   r   s    ``r<   missing_idsr   v   s!    UUUUUUUUUrD   dict[str, Any]c                "   | dz  dz  }|                                 sdd t          D             dS t          j        |                    d                    }|                    di           }t          D ]}|                    |d	           |S )
Nlogsworkflow_state.json   c                    i | ]}|d S )pendingr   )rr   stages     r<   
<dictcomp>zload_state.<locals>.<dictcomp>}   s    (N(N(Ne	(N(N(NrD   )versionstagesr!   r"   r   r   )existsSTAGESr0   rT   rU   
setdefault)rY   
state_pathr   r   r   s        r<   
load_stater   z   s    !66J P(N(Nv(N(N(NOOOJz++W+==>>Eh++F , ,%++++LrD   r   statusevidencedict[str, Any] | Nonec                    |t           vs|dvrt          d| d|           t          |           }||d         |<   |||                    di           |<   t	          | dz  dz  |           d S )N>   PASSfailedblockedr   in_progresszinvalid state: =r   r   r   r   )r   rS   r   r   r=   )rY   r   r   r   states        r<   
save_stager      s    Ff,ccc;5;;6;;<<<tE#E(OE2:R((/dVm&;;UCCCCCrD   
str | Nonec                p    t          |           d         t          fdt          D             d           S )Nr   c              3  N   K   | ]}                     |          d k    |V   dS )r   N)rV   )rr   r   r   s     r<   rt   z#first_incomplete.<locals>.<genexpr>   s9      JJ5fjj.?.?6.I.I.I.I.I.IJJrD   )r   nextr   )rY   r   s    @r<   first_incompleter      s:    h'FJJJJFJJJDQQQrD   c                z    t          j        dd| pd                                                                          S )Nz\s+  )rW   substripcasefold)r   s    r<   normalize_contentr      s2    6&#224455>>@@@rD   g      >@)fps	intervalsIterable[tuple[float, float]]r   ru   list[tuple[float, float]]c                   g }d|z  dz   }t          |           D ]a\  }}|rC||d         d         |z   k    r.|d         d         t          |d         d         |          f|d<   J|                    ||f           b|S )Nr   g-C6?r   )sortedmaxappend)r   r   merged	tolerancestartends         r<   merge_intervalsr      s    (*FC$IY'' ( (
s 	(evbz!}y888 *Q-VBZ]C)@)@AF2JJMM5#,''''MrD   api_keydict[str, str]c                .    | st          d          | ddS )NzPOSTIZ_API_KEY is emptyzapplication/json)AuthorizationzContent-Type)rS   )r   s    r<   raw_postiz_headersr      s(     42333$6HIIIrD   )r   r   r   r   r   r   )r   r   r   r>   )r   r   r   r   )r   r   rY   r   r^   r_   r   r   )r   r   r   r_   )
r   r   rz   r}   r{   r}   r|   r}   r   r_   )r   r   r   r>   r   r   )rY   r   r   r   )N)
rY   r   r   r>   r   r>   r   r   r   r   )rY   r   r   r   )r   r>   r   r>   )r   r   r   ru   r   r   )r   r>   r   r   ) __doc__
__future__r   rE   r0   r.   rW   r   r+   rf   pathlibr   typingr   r   r(   rQ   r   r=   rM   r]   rd   rl   ry   r   r   r   r   r   r   r   r   r   rD   r<   <module>r      s   Q Q " " " " " "   				 				                         d)**2244
$   $       CH         	 	 	 	 /3c[a 
 
 
 
 
 
V V V V   D D D D DR R R R
A A A A OS      J J J J J JrD   