
    `j{                    
   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	m
Z
 ddlmZmZ g dddg d	d
dg ddddZd=d>dZd?dZedfd@dZedd fdAd%ZdBd(ZdCd-ZdDd4ZdEd7ZdFd9ZefdGd:Zed;k    r ed<          dS )HzCFail-closed render-pool helpers for Huyen An Audio project runners.    )annotationsN)Path)AnyCallable)zhttp://192.168.1.104:8022zhttp://192.168.1.104:8025zhttp://192.168.1.104:8028zhttp://192.168.1.104:8031z/v1/footage-render-huyenan/jobs)	base_urls	jobs_path)zhttp://192.168.1.104:8023zhttp://192.168.1.104:8026zhttp://192.168.1.104:8029zhttp://192.168.1.104:8032z/v1/huyenan-render-final/jobs)zhttp://192.168.1.104:8024zhttp://192.168.1.104:8027zhttp://192.168.1.104:8030zhttp://192.168.1.104:8033z!/v1/huyenan-transcode-upload/jobs)footagefinal	transcode      .@urlstrtimeoutfloatreturnr   c                    t           j                            | |          5 }t          j        |          cd d d            S # 1 swxY w Y   d S )N)r   )urllibrequesturlopenjsonload)r   r   responses      /data/video-pipeline/Chanel-HuyenAnAudio/project/016-Ngay-Chung-Toi-Nop-Don-Ly-Hon-Anh-Dua-Toi-Ban-Hon-Uoc-Khong-Con-Dieu-Khoan-Nao/script/render_pool.pyget_jsonr   -   s    			W		5	5 #y""# # # # # # # # # # # # # # # # # #s   AA
Ar   list[dict[str, Any]]c                0   t          | t                    r1t          |                     d          t                    r	| d         }n't          | t                    r| }nt	          d          t          d |D                       st	          d          |S )Njobsz!Unknown list-jobs response schemac              3  @   K   | ]}t          |t                    V  d S )N)
isinstancedict.0rows     r   	<genexpr>z!normalize_jobs.<locals>.<genexpr>9   s,      55z#t$$555555    z"Invalid item in list-jobs response)r   r    getlistRuntimeErrorall)r   rowss     r   normalize_jobsr+   2   s    (D!! @jf1E1Et&L&L @	Hd	#	# @>???5555555 A?@@@Kr%   base_urlr   fetchCallable[[str, float], Any]boolc                z    || dz   |          }t          |t                    sdS |                    d          dk    s|                    d          durdS |                    d          }t          |t                    r|rdS t	           || |z   |                    }t          d |D                        S )	Nz/healthFstatusok
h264_nvencTrunningc              3  D   K   | ]}|                     d           dv V  dS )r1   >   queuedr4   N)r&   r!   s     r   r$   z#endpoint_is_idle.<locals>.<genexpr>M   s4      NN#3778$$(==NNNNNNr%   )r   r    r&   r'   r+   any)r,   r   r-   r   healthr4   r   s          r   endpoint_is_idler9   >   s     U8i'11Ffd## uzz(t##vzz,'?'?t'K'Kujj##Ggt$$  u%%9 4g>>??DNNNNNNNNNr%   i@8  g      >@stagewait_timeoutintervaltuple[str, str]c           
        t                               |           }|t          d|            t          j                    |z   }	 |d         D ]q}|t          j                    z
  }|dk    rt          d          	 t          ||d         |t          d|                    r||d         fc S b# t          $ r Y nw xY w|t          j                    z
  }|dk    rt          d          t          j	        t          ||                     )	NzUnknown render stage: Tr   r   z'No idle render endpoint before deadliner   r   )r-   r   )
RENDER_POOLSr&   
ValueErrortime	monotonicTimeoutErrorr9   min	Exceptionsleep)r:   r-   r;   r<   pooldeadliner,   	remainings           r   select_idle_endpointrJ   P   sI    E""D|9%99:::~,.H-[) 	 	H 4>#3#33IA~~"#LMMM
#%i00	   7 $T+%666667     t~///	>>HIII
3x++,,,'-s   <0B00
B=<B=payloaddict[str, Any]c                    t          j        | ddd                              d          }t          j        |                                          S )NFT),:)ensure_ascii	sort_keys
separatorsutf-8)r   dumpsencodehashlibsha256	hexdigest)rK   encodeds     r   canonical_payload_sha256rZ   p   sR    j	  
 fWoo  >'"",,...r%   pathr   dataNonec                    | j                             dd           |                     | j        dz             }|                    t          j        |dd          dz   d	           t          j        ||            d S )
NT)parentsexist_okz.partF   )rP   indent
rS   encoding)	parentmkdir	with_namename
write_textr   rT   osreplace)r[   r\   	temporarys      r   atomic_write_jsonrn   z   s    KdT222ty7233I
4eA666=     Jy$r%   
project_idrun_idinput_sha256dict[str, str]output_path
created_atc       	        $   |                                  rt          d          t                              |          }
|
||
d         vs||
d         k    rt          d          d|||d||t	          |          |||	d}t          | |           |S )Nz;Render intent already exists; reconcile it before selectionr   r   z8Selected endpoint does not belong to the requested stage   creating)schema_versionro   rp   r:   r1   r,   r   request_sha256rq   rs   rt   )existsr(   r?   r&   rZ   rn   )r[   ro   rp   r:   r,   r   rK   rq   rs   rt   rG   intents               r   write_creating_intentr|      s     {{}} ZXYYYE""D|xtK'888IkIZ<Z<ZUVVV 27;;$"  F dF###Mr%   job_idsubmitted_atc                "   t          j        |                     d                    }|                    d          dk    s|                    d          st	          d          |                    d||d           t          | |           |S )	NrS   rd   r1   rw   r,   zIntent is not in creating state	submitted)r1   r}   r~   )r   loads	read_textr&   r(   updatern   )r[   r}   r~   r{   s       r   mark_submittedr      s    Z8899Fzz(z))J1G1G)<===
MM[FLYYZZZdF###Mr%   r{   c                    |                      d          r*|                      d          r|                      d          st          d          | d                             d          | d         z   dz   | d         z   S )Nr,   r   r}   z1Pinned base_url + jobs_path + job_id are required/)r&   r(   rstrip)r{   s    r   pinned_job_urlr      s    ::j!! PK)@)@ P

S[H\H\ PNOOO*$$S))F;,??#ExHXXXr%   c                H    t          | ||          st          d          d S )N)r-   z*Selected render endpoint is no longer idle)r9   r(   )r,   r   r-   s      r   recheck_selected_endpointr      s7    
 Hiu=== IGHHHI Ir%   __main__zHImport this helper from a project runner; it does not submit jobs itself)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=   )rK   rL   r   r   )r[   r   r\   rL   r   r]   )r[   r   ro   r   rp   r   r:   r   r,   r   r   r   rK   rL   rq   rr   rs   r   rt   r   r   rL   )r[   r   r}   r   r~   r   r   rL   )r{   rL   r   r   )r,   r   r   r   r-   r.   r   r]   )__doc__
__future__r   rV   r   rk   rA   urllib.requestr   pathlibr   typingr   r   r?   r   r+   r9   rJ   rZ   rn   r|   r   r   r   __name__
SystemExit r%   r   <module>r      s   I I " " " " " "   				                           
 
 
 7 
 
 
 5 
 
 
 9 ' ># # # # #
	 	 	 	 *2	O O O O O( *2%	- - - - -@/ / / /              F   Y Y Y Y *2I I I I I z
*_
`
`` r%   