
    _jE                         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 ed          Z
e
j        ZdZdZ ej                    dz  Zg dZd Zd	 Zd
 Zd Zd Zd Zd Zd Zedk    r e             dS dS )    )PathNzR/data/video-pipeline/HaTramAudio/project/022-Tiem-Giat-Mo-Cua-Luc-Bon-Gio-Muoi-Bayzrun-20260721T172022Z-9462493aLevyz .config/ha-tram-audio/postiz.env)storyttslayoutposterintrofootagefinal_render	transcodemetadatapublish_readyuploadschedulecleanupc                      t           j                             t           j        j                                                                      dd          S )N+00:00Z)datetimenowtimezoneutc	isoformatreplace     work/audit_completion.pyr   r      s<    "&&x'8'<==GGIIQQRZ[^__
_r   c                    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)fs   r   <lambda>zsha.<locals>.<lambda>
   s    qvvk** r   r   )hashlibsha256openiterupdate	hexdigest)phbr"   s      @r   shar-      s    
>ffTll <a****3//;;a;< < < < < < < < < < < < < < <	s   ,A##A'*A'c                     t          j        t          dz                                            } t          t
          t          d                                D ]0\  }}|                     |          |k    rt          d|z             1d S )Nz.ownership-lock.json)
project_idrun_idownerzownership mismatch )
jsonloadsROOT	read_textPIDRUNOWNERitemsgetRuntimeError)dkvs      r   guardr?      s~    :t**557788s599??AA = =SQqUU1XXq[[|$9!$;<<<[= =r   c                  n   i } t                                                                           D ]}|                                }|rn|                    d          sYd|v rU|                    dd          \  }}|                                                    d          | |                                <   | S )N#=   z"')CFGr5   
splitlinesstrip
startswithsplit)r<   rawsr=   r>   s        r   envrK      s    MMOO&&(( : :SIIKK! :q||C   :SAXXwws1~~31Q17799??5#9#9a		l	r   c                     t                       |                     d| j        z   dz             }|                    t	          j        |dd          dz              t          j        ||            d S )N.z.tmpF   )ensure_asciiindent
)r?   	with_namename
write_textr2   dumpsosr   )r*   r<   ts      r   atomicrX      s    !++c!&j&788djQR`emnFoFoFoptFt9u9u9uvx  wA  BC  DE  wF  wF  wF  wF  wFr   c                 0   t           j                             |                     dd                    }|j        %|                    t           j        j                  }|                    t           j        j                                      d          S )Nr   r   )tzinfor   )microsecond)r   fromisoformatr   rZ   r   r   
astimezone)r>   xs     r   parse_dtr_      so    ""199S#:#:;;Hqyy(9(=y>>Q	X&*++333BBBr   c                 *   t                      }t          | d                   }t          j                            |t          j        d          z
                                                      dd          |t          j        d          z                                                       dd          d          }t          j	        
                    |d                             d          d	z   |z   |d
         dd          }t          j	                            |d          5 }t          j        |          }d d d            n# 1 swxY w Y   t          |t                     r|n+|                    d          p|                    d          pg }d | d         D             }g }	|D ]%}
|
                    d          pi }t          |t$                    r|                    d          n|
                    d          }|
                    d          p|
                    d          }|
                    d          p|
                    d          }||v rt|rrt          |          |k    r_|||         k    rSt'          |
                    dd                                                    dk    r|	                    ||d|d           't-          |	          dk    sd |	D             t/          |          k    rt1          d           |	S )!Nslot_utc
   )minutesr   r   )	startDateendDatePOSTIZ_BASE_URL/z/posts?POSTIZ_API_KEYzapplication/json)AuthorizationAccept)headers<   )timeoutpostsdatac                 ,    i | ]}|d          |d         S )integration_idpost_idr   .0r^   s     r   
<dictcomp>z#verify_calendar.<locals>.<dictcomp>    s$    
W
W
W1q|
W
W
Wr   calendar_verificationintegrationidintegrationIdpublishDatedatepostIdstate QUEUE)rr   rq   r}   rz   rN   c                     h | ]
}|d          S )rq   r   rs   s     r   	<setcomp>z"verify_calendar.<locals>.<setcomp>$   s    999aa()999r   z-calendar does not prove exact two QUEUE posts)rK   r_   urllibparse	urlencoder   	timedeltar   r   requestRequestrstripurlopenr2   load
isinstancelistr:   dictstrupperappendlensetr;   )r   eslotqreqrrI   rn   expectedfoundr*   integiidpdpids                  r   verify_calendarr      s   55hx
+,,v|/E/ETXYaYktvYwYwYwTw  TC  TC  TE  TE  TM  TM  NV  WZ  T[  T[  gk  lt  l~  GI  lJ  lJ  lJ  gJ  fU  fU  fW  fW  f_  f_  `h  il  fm  fm  Gn  Gn  0o  0oQ  tz  tB  tJ  tJ  KL  M^  K_  Kf  Kf  gj  Kk  Kk  lu  Ku  vw  Kw  QR  Sc  Qd  n@  @A  @A  tJ  tB  tB  psnS,,Bdill#BBBBBBBBBBBBBBBT""Qss(8(8(QCGGFOO(Qr
W
WX>U5V
W
W
W^`X]
 J JQ	m"%*U4:P:P'luyyVWV[V[\kVlVl3pqpupu  wD  qE  qE  qV  IJ  IN  IN  OU  IV  IVmo  [\  [`  [`  ae  [f  [f  [y  jk  jo  jo  px  jy  jy  WZH___d 2 2sHSM7I7IcRSRWRWX_`bRcRcNdNdNjNjNlNlnuNuNuv{  wC  wC  OR  dg  pw  FH  DI  DI  wJ  wJ  wJJJMM9959993x==HH|  ]L  PM  PM  JMs   (E		EEc                  
   t          j                    } |                     dddg           |                                 j        }t                       t          dz  }t          j        |	                                          }|
                    di           t          j        t          dz  	                                          }t          |          }|d         }|dk    rt          d d	         nt          }t          fd
|D                       rt          d|z             t          dz  }t          j        t          dz  	                                          }	t          j        t          dz  	                                          }
|                                rO|                                j        dk    s2t%          |          |	d         k    st%          |          |
d         k    rt          d          t          dz  }|                                r&t          j        |	                                          ni }|
                    di           }|dk    rdD ]q\  }}t          |z  }|                                st          d|z             t)          |          ||                                j        t%          |          dd||<   r|                    dddddt-                      t-                      d           t/          ||           nt          j        t          dz  	                                          }|
                    d          dk    s|
                    d          durt          d          dD ]N}t1          ||         d                    }|                                rt          d!|z             d||         d"<   Ot)          |          d|                                j        t%          |          dd|d#<   d$t2          t4          dd|dk    rd%nd&|t7          |          ||d'         |d(         |d)|dddd|dk    |dk    d*t-                      d+}t/          ||           |dk    rmt          j        |	                                          }|                    ddddddt%          |          t-                      d,           t/          ||           t9          t          j        dd|t7          |          t7          |          |                                j        d-d.                     d S )/Nmodeprepost)choiceszscript/project-manifest.jsongate_eventszlog/schedule.jsoncanon_sha256c              3      K   | ]\}                     |i                                d           dk    p*                     |i                                d          duV  ]dS )status	completedverifiedTN)r:   )rt   geventss     r   	<genexpr>zmain.<locals>.<genexpr>)   sl      vvhi

1RX&&3cvzz!B7G7G7K7KJ7W7W_c7cvvvvvvr   zgate set incomplete for zoutput/final-upload.mp4zlog/upload.jsonzlog/transcode-upload.jsoni ʚ;artifact_sha256zretained upload mismatchzlog/completion-audit.json	artifacts))finalzoutput/final.mp4)r
   zoutput/footage/footage.mp4zpre-cleanup target missing T)pathrelative_pathbytesr%   existsr   F)r   r   	scheduled	publishedpublish_blockedcompleted_at
updated_atzlog/cleanup.jsonr   r   zcleanup receipt invalid)r   r
   r   ztransient artifact remains r   upload_copyrC   pre_cleanuppost_cleanup_final
slot_localra   )r   ra   rv   )all_required_gates_verifiedexact_two_queue_postsretained_upload_hash_verifiedretained_upload_under_one_gb$transient_targets_present_and_lockedtransient_targets_absent)schema_versionr/   r0   r   r   phasesource_canon_sha256
gate_countverified_gatesr   r   checksr   )r   r   r   r   r   completion_auditcompletion_audit_sha256r   )r   r   r   r   queue_postsretained_bytes)rO   )argparseArgumentParseradd_argument
parse_argsr   r?   r4   r2   r3   r5   r:   r   GATESanyr;   is_filestatst_sizer-   r   r   r(   r   rX   r   r6   r7   r   printrU   )ar   mpmr   calendarcanonrequiredretainedr   trans
audit_patholdr   keyrelr*   r   r<   r   s                      @r   mainr   &   s   Q^^FE&>^JJJPQP\P\P^P^Pc4didkdkdkos  uS  pSln  VZ  V`  ac  am  am  ao  ao  Vp  Vp  TU  xy  x}  x}  ~K  LN  xO  xO  qw  Y]  Yc  ei  j}  e}  dH  dH  dJ  dJ  YK  YK  PX  Ud  em  Un  Un  LT  uv  wE  uF  ote%**vvvvmuvvvvv  k  ~J  Ke  fj  Kj  ~k  ~k  xk
(
(
DAR<R;];];_;_0`0`gkgqsw  yT  tT  s_  s_  sa  sa  hb  hbaf  Khmmoo5}DDHW]^oWpHpHptw  yA  uB  uB  DI  J[  D\  u\  u\  co  pJ  cK  cK  ]K,,WaWhWhWjWj1rJ<P<P<R<R1S1S1SprS  ~A  ~E  ~E  FQ  RT  ~U  ~Us|%KKX m mgc#	#X1
))++KL)Fs)JKKKa&&QVVXX=MWZ[\W]W]gkll9S>>(([DTefk{~  |A  |A  OR  OT  OT  U  U  V  V  V  W]  ^`  ab  Wc  Wc  Wc  Wc
*d--88::
;
;'[[K''7;;z+B+B$+N+NUab{U|U|O|  " "c	)C.
 !!1hhjjF|$A#$EFFF!9S>("%h--@Ybjbobobqbqby  DG  HP  DQ  DQ  [_  `  `=CkUYswy~s~s~bobo  EY  pu  CF  GO  CP  CP  bj  DL  MY  DZ  fn  oy  fz  S[  v\  v\  ir  [_  x|  ]a  AE  mq  sx  mx  T	X	  Z	`	  T	`	  |a	  |a	  q	t	  q	v	  q	v	  w	  w	  x	~	  	I
  J
K
  x	L
  x	L
  x	L
&LLJr||~~!qxx+Z^kp  DI  ]x  SV  Wa  Sb  Sb  ps  pu  pu  )v  )v   w   w   w  x~  A  BC  xD  xD  xDtzK4tQTU]Q^Q^mpqymzmz  MU  MZ  MZ  M\  M\  Md  e  e  sx  y  y  y  z  z  z  z  zr   __main__)pathlibr   r   r   r$   r2   rV   urllib.parser   urllib.requestr4   rS   r6   r7   r8   homerD   r   r   r-   r?   rK   rX   r_   r   r   __name__r   r   r   <module>r      s         D D D D D D D D D D D D D D D D D D D D D D D D D D D D	T
^__dhdm`c  sRnq  Y_  SX  dm  dh  dm  do  do  pR  dR  `c N  N  N _ _ _  
= = =
 
 
 F  F  FC C C	 	 	z z z4 Zr   