
    '`j                        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m	Z	 d dl
mZ d dlmZmZmZmZ  ee                                          j        d         Zedz  Zedz  Zedz  Zed	z  Zed
z  Zedz  Zedz  Zedz  ZdZd ZddZd Z d Z!e"dk    r\	  ej#         e!                       dS # e$$ r9Z% e&d e'e%          z   ej(                    ej#        d           Y dZ%[%dS dZ%[%ww xY wdS )    N)datetimetimezone)Path)atomic_write_jsoncanonical_payload_sha256endpoint_is_idleselect_idle_endpoint   zoutput/final.mp4zlog/final-render.jsonzstory/promotion-report.jsonzoutput/final-upload.mp4zoutput/final-upload.staging.mp4z log/upload-transcode-intent.jsonz$log/upload-transcode-submission.jsonzlog/upload-transcode.json	transcodec                    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/transcode-upload.py<lambda>zsha.<locals>.<lambda>   s    &++o">">     r   )hashlibsha256openiterupdate	hexdigest)pathdigestblockr   s      @r   shar      s    ^F	4 !F>>>>DD 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   ,A##A'*A'   c                 R   |)t          j        |dd                                          nd }t          j                            | |z   ||rddini |          }t          j                            ||          5 }t          j        |          cd d d            S # 1 swxY w Y   d S )NT),:)	sort_keys
separatorszContent-Typezapplication/json)dataheadersmethodtimeout)jsondumpsencodeurllibrequestRequesturlopenload)base_urlr&   r   payloadr(   bodyr-   responses           r   request_jsonr5   "   s    RYRe4:g*EEELLNNNkoDn$$X_4quI}.ZlImIm{}  GM$  N  NG					9	9 #Xy""# # # # # # # # # # # # # # # # # #s   ;BB #B c                     t          j        dddddddddt          |           g
d	d	d	
          }t          j        |j                  S )Nffprobez-verrorz-show_entrieszformat=duration,sizezMstream=index,codec_name,width,height,sample_rate,channels:stream_tags=encoderz-ofr)   T)capture_outputtextcheck)
subprocessrunstrr)   loadsstdout)r   results     r   proberB   )   s    ^YgH^`o  rA  CH  JP  RU  VZ  R[  R[  \  mq  x|  DH  I  I  IF:fm$$$r   c                  "   t           t          t          fD ](} |                                 st	          d|            )t          j        t                              d                    }t          j        t                              d                    }|                    d          }t          t                     }|                    d          du rI|                    d          du r2|                    d          |k    r|                    d          |k    st	          d	          t                                          r,t          j        t                              d                    }|                    d          du r|                    d          |k    r|                    d
          |k    rt                                          rt                                          j        dk     r{|                    d          t          t                    k    rPt          t          j        d|d         |d         t                                          j        d                     dS t                                          r(t                                          st	          d          t!          t                               t$                              |i}d }t&                                          st(                                          rt(                                          rt(          nt&          }t          j        |                    d                    }	|	                    d          |k    s|	                    d
          |k    rt	          d          |	                    d          r|	                    d          st	          d          |	                    d          st	          d          |	}|t!          t                     t!          t*                    dddddddd	}
t-          t.                    \  }}t1          ||          st	          d          dddt.          d ||t3          |
          |t!          t*                    |t5          j        t8          j                                                  |
d!}t?          t&          |           tA          |d"||
          }|                    d          }|r|                    d#          d$vrt	          d%          |!                    d&|t5          j        t8          j                                                  d'           t?          t&          |           t?          t(          |           |d         |d         |d         }}}tE          j#                    d(z   }d }tE          j#                    |k     r|tE          j#                    z
  }tA          |d)|d*z   |z   tI          dtK          d|                    +          }|                    d#          d,v rnjtE          j&        tK          d-tI          d|tE          j#                    z
                                 tE          j#                    |k     t	          d.          |                    d/i           }|                    d#          d0k    s|                    d          dur;t	          d1|                    d#           d2|                    d3                     t*          '                                st	          d4          tQ          t*                    }|                    d5g           }d6 |D             }d7 |D             }tS          |          dk    otS          |          dk    o|d                             d8          d9k    o|d                             d8          d:k    ov|d                             d;          dk    oW|d                             d<          dk    o8t*                                          j        dk     o|                    d=          du }|st	          d>          tU          j+        t*          t                     i d?d@ddd#d0d|dA|                    dA          d|d|d|dB|                    dB          dCt!          t                               t$                              d
|dDt!          t                              t$                              dEt                                          j        dt          t                    dF|dG|dHddIdJdKdLt5          j        t8          j                                                  i}t?          t          |           t          t          j        d|||dE         |d         dMdN                     dS )ONzmissing zutf-8)encodingspoken_sha256verifiedTsource_canon_sha256output_sha256z!final/canon/hash receipt mismatchinput_sha256i ʚ;r1   job_id)reused_verifiedr1   rJ   bytesr   z unreceipted upload output existsz8prior attempt belongs to different authority/input bytes	jobs_pathz"prior attempt lacks pinned replicaz.ambiguous POST; manual reconciliation requiredi /`   i  i8  r   F)	input_video_pathoutput_video_pathtarget_output_bytesmax_output_bytesaudio_bitrate_kbpswidthheightfps	overwritez"selected replica is no longer idler
   014z014-transcode-v1creating)schema_version
project_idrun_idstagestatusr1   rM   request_sha256rI   output_pathrG   
created_atr2   POSTr^   >   queuedrunningz/POST result ambiguous; reconcile pinned replica	submitted)r^   rJ   submitted_ati  GET/r'   >   failed	cancelled	completed
   z(observer timeout; resume same pinned jobverificationrk   z
job ended z: r8   z#completed job has no staging outputstreamsc                 <    g | ]}|                     d           |S )rT   get.0ss     r   
<listcomp>zmain.<locals>.<listcomp>k   s'    2221155>>2Q222r   c                 <    g | ]}|                     d           |S )sample_raterp   rr   s     r   ru   zmain.<locals>.<listcomp>l   s)    8881155#7#78Q888r   
codec_nameh264aacrT   rU   under_one_gbzstaging verification failedversion   r\   r_   inputoutputoutput_bytesserver_verificationindependent_probe	visual_qanot_required!contains_user_preapproved_footage)requiredr^   reason
checked_at)rF   r1   rJ   rL   r   )ensure_ascii),FINALFINAL_RECEIPT	PROMOTIONexistsRuntimeErrorr)   r?   	read_textrq   r   RECEIPTOUTPUTstatst_sizeprintr*   r>   relative_toPROJECTINTENT
SUBMISSIONSTAGINGr	   STAGEr   r   r   nowr   utc	isoformatr   r5   r   time	monotonicmaxminsleepis_filerB   lenosreplace)r   final_receipt	promotioncanon	final_shaoldinput_hashes
submissionrecord_path	candidater2   r1   rM   createdrJ   deadlinejob	remainingrm   localrn   videoaudiorF   receipts                            r   mainr   .   s   y1 2 2{{}} 	20$00111	2J}666HHIIM
9...@@AAIMM/**EE

IMM*%%---2C2CJ2O2OSW2W2W\i\m\m  oD  ]E  ]E  IN  ]N  ]N  S`  Sd  Sd  et  Su  Su  yB  SB  SB>???~~ j**G*<<==77:$&&3773H+I+IU+R+RWZW^W^_mWnWnr{W{W{  AG  AN  AN  AP  APW{  U[  U`  U`  Ub  Ub  Uj  mz  Uz  Uz  B  F  F  GV  W  W  [^  _e  [f  [f  f  f$*3z?^abj^kv|  wB  wB  wD  wD  wL  M  M  N  N  O  O  O1}} ?w~~// ?=>>>))'2233Y?LJ}} 	*++-- 	$.$5$5$7$7CjjVJ{44g4FFGG	==.//588IMM.<Y<Y]i<i<iYZZZ}}Z(( 	E	k0J0J 	ECDDD}}X&& 	QOPPP
'*5zzGmx  O\  tv  AE  QU  ^`  ot  u  u2599))44 	ECDDD()J\gl  yC  QY  hq  E]  ^e  Ef  Ef  xD  UX  Y`  Ua  Ua  z  OW  O[  \d  \h  Oi  Oi  Os  Os  Ou  Ou  BI  J  J
&*---xGDDX&& 	RX..6KKKPQQQ[FT\T`aiamTnTnTxTxTzTz{{|||&*---*j111",Z"8*[:QS]^fSgiH~$&H
C
.

X
%
%t~///	8UIOf,DcRSUXY[]fUgUgNhNhiii778 DDD
3r3q(T^-=-="=>>??@@@ .

X
%
% EFFF77>2..L
wwxK''<+;+;J+G+Gt+S+SO(9(9OOSWWW=M=MOOPPP?? B@AAA'NNEii	2&&G22222E88888E5zzQ  a3u::?  auQx||L7Q7QU[7[  a`efg`h`l`lmy`z`z  D  aD  a  IN  OP  IQ  IU  IU  V]  I^  I^  bf  If  a  kp  qr  ks  kw  kw  x@  kA  kA  EI  kI  a  NU  NZ  NZ  N\  N\  Nd  gt  Nt  a  yE  yI  yI  JX  yY  yY  ]a  yaH :8999Jw T
y!  T
Z  T
x  T
F[]b  T
dlnxn|n|  ~F  oG  oG  T
  IS  U]  T
  _j  lu  T
  w  AG  T
  IY  [e  [i  [i  jz  [{  [{  T
  }D  FI  JO  J[  J[  \c  Jd  Jd  Fe  Fe  T
  gu  w@  T
  BJ  LO  PV  Pb  Pb  cj  Pk  Pk  Ll  Ll  T
  n|  ~D  ~I  ~I  ~K  ~K  ~S  T
  Ud  fi  jp  fq  fq  T
  sH  JV  T
  Xk  mr  T
  t  NS  _m  y\	  A]	  A]	  T
  _	k	  m	u	  m	y	  z	B
  z	F
  m	G
  m	G
  m	Q
  m	Q
  m	S
  m	S
  T
  T
Ggw'''	$*$HY`aoYp  }D  ET  }U  V  V  ej  k  k  k  l  l  l1r   __main__zTranscode blocked: )file)Nr   ))r   r)   r   r<   sysr   urllib.requestr,   r   r   pathlibr   render_poolr   r   r   r	   __file__resolveparentsr   r   r   r   r   r   r   r   r   r   r   r5   rB   r   __name__exit	Exceptionexcr   r>   stderr r   r   <module>r      s     				     



      ' ' ' ' ' ' ' '       k k k k k k k k k k k k
$x..
 
 
"
"
*1
-$$1133		,	,
5
5	5	5==

/
/  # # # #% % %
F F FR z   #cc#hh.SZ@@@@ s   B7 7C5<.C00C5