
    *o]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m	Z	  e	e
                                          j        d         Zedz  Z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.json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/verify-promotion.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| d          t	          |          }|                                s
t          |z  }	 |                                                    t                                                     n%# t          $ r}t          d|           |d }~ww xY w|S )Nactive_pathszactive_paths.z is missingzactive path escapes project: )
get
isinstancer   RuntimeErrorr   is_absoluteROOTresolverelative_to
ValueError)r   r   valuer   excs        r   resolve_activer(      s    \\.))/R44S99EeS!! = =;3;;;<<<;;D d{K""4<<>>2222 K K K@3@@AAsJKKs   >C 
C$CC$r&   Nonec                   | j                             dd           t          j        |dd          dz                       d          }t          j        d| j         d| j         	          \  }}	 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.)prefixdir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_jsonrI   &   s   KdT222Ju5;;;dBJJ7SSD'749'7'7'7T[IIIHBYr4   	&FLLLLNNNHV]]__%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	
47>>$ 	IdOOOOO	 	27>>$ 	IdOOOO	s1   2D: AC#D: #C''D: *C'+D: :6E0intc                    t          j        t                              d                    } t	          | d          t	          | d          t	          | d          t	          | d          t	          | d          t	          | d          t	          | d	          d
d                                 D             }|rt          d|           t          j        d                             d                    }t          j        d                             d                    }t          j        d                             d                    }d                                         }d                                         }d                                         }|                    dd          }fddD             }	t          t          j        d|                    t          t          j        d|                    t          t          j        d|t          j                            t          t          j        d|t          j                            d}
|                    di           }d}i }|                                D ]\  }}t          |t                    r|                    d          nd }t          |t                    r|                    d          nd }t          |t                     rt#          |          nt#          d          }|                                o|t'          |          k    }|o|}|||                                rt'          |          nd |d||<   |                    d           d!k    o|                    d"          du |                    d           d!k    o5|                    d#          du o|                    d$          |	d         k    ||cxk    o|k    nc t)          t+          |	                                                    d%k    |                    d$          |	d         k    o=|                    d&          |	d         k    o|                    d'          |	d         k    |                    d$          |	d         k    o=|                    d&          |	d         k    o|                    d'          |	d         k    |                     d&          |	d         k    o|                     d'          |	d         k    |                    d           d(k    o|                    d)          d*k    or|                     d           d+k    oY|                     d,i                               d-          d!k    o,|                     d,i                               d.          d!k    |                    d/          t)          |                                          k    t1          |
                                           t)          |          d0k    o|d1}t3          |                                          }|rd!nd2||	d         |	d         |	d         t)          |                                          d3 |                                D             ||
d4 |                                D             d5
}t5          d6         |           t7          t          j        |d          ||d7         t!          d6                   d8d9:                     |rd;nd%S )<Nr1   )encoding	candidatestory_canonspoken_narrationpromotion_receiptproducer_close_receiptstory_manifestpromotion_verification_receipt)rM   canon	narration	promotionproducer_closerR   outputc                f    g | ].\  }}|d k    |                                 t          |          /S )rX   )rE   r   ).0r   r   s      r   
<listcomp>zmain.<locals>.<listcomp>@   s8    aaaYS$3(??SWS^S^S`S`?s4yy???r   zpromotion bundle missing: rV   rW   rT   rU   strict)errorsc                <    i | ]}|t          |                   S  )r   )rZ   r=   filess     r   
<dictcomp>zmain.<locals>.<dictcomp>J   s'    XXXDdF5;''XXXr   )rM   rT   rU   z(?m)^\s*#{1,6}\s+u@   (?mi)^\s*(?:chương|phần|cảnh|scene|act)(?:\s+\d+|\s*[:.-])z\b(?:TODO|TBD|PLACEHOLDER)\bu+   Gác Mái Audio|đăng ký kênh|like video)headingscene_markerplaceholderchannel_ctagate_receiptsTr   r   z/__missing__)r   expected_sha256observed_sha256verifiedstatus	completedri   writer_closedcandidate_sha256r   canon_sha256spoken_narration_sha256promoted
media_gater   story_promotedstepsstory
voice_testwords_whitespace   )promotion_verifiedproducer_closedbyte_equalityhash_equalitypromotion_hashesstory_manifest_hashesproject_manifest_hashesmanifest_states
word_countnarration_hygienegate_receipts_hashedfailedc                     i | ]\  }}|||d S ))ri   r&   r_   rZ   r=   r&   s      r   ra   zmain.<locals>.<dictcomp>m   s&    ___u4ee<<___r   c                    g | ]	\  }}||
S r_   r_   r   s      r   r[   zmain.<locals>.<listcomp>o   s!    IIIkdE5ITIIIr   )
rj   ri   rm   rn   ro   rv   checksrf   hygiene_findingsblockersrX   r   )rj   ri   r   receiptFr.   r   )r8   loadsMANIFEST_PATH	read_textr(   itemsr    
read_bytesdecodeboolresearchIr   r   r   r   r   rE   r   lensetvaluessplitanyallrI   printr9   )projectmissingrV   rt   closecandidate_bytescanon_bytesnarration_bytescandidate_texthasheshygienerf   gate_receipts_validgate_detailsr=   r&   
path_valueexpectedr   validr   ri   resultr`   s                          @r   mainr   5   sb   j00'0BBCCG#G[9977#G-?@@#G-@AA(2JKK(2BCC *JKK E ba%++--aaaG CAAABBB
5-777IIJJIJu-.88'8JJKKEJu-.88'8JJKKEK(3355O.++--KK(3355O$++GH+EENXXXX4WXXXF	"6GGHHRY'jlz{{||BI&E~WYW[\\]]BI&TVdfhfjkkll	 G MM/266ML$**,, ^ ^e*4UD*A*AKUYYv&&&t
*4UD*A*AK599X&&&t#-j##>#>XtJDDXDX:(fTll":1;e&0Xrvr}r}rr  cJbhimbnbnbn  FJ  X]  ^  ^T'mmH55DjWaIbIbfjIj 99X..+=  ^%))OB\B\`dBd  ^inirir  tF  jG  jG  KQ  R]  K^  j^(KJJJJ?JJJJS1122a7%MM*<==ATT  NYbYfYfguYvYv  {A  BI  {J  ZJ  N  OX  O\  O\  ]v  Ow  Ow  {A  BM  {N  ON!&+=!>!>&BU!U  "GZ_ZcZcdrZsZsw}  F  xG  [G  "G  LQ  LU  LU  Vo  Lp  Lp  tz  {F  tG  LG#*;;~#>#>&/#Q  $TV]VaVab{V|V|  AG  HS  AT  WT 99X..*<  H<AXAX\bAb  Hgngrgrs{g|g|  AQ  hQ  H  V]  Va  Va  bi  km  Vn  Vn  Vr  Vr  sz  V{  V{  J  VJ  H  OV  OZ  OZ  [b  df  Og  Og  Ok  Ok  lx  Oy  Oy  }H  OHmm$6773~?S?S?U?U;V;VV!$W^^%5%5!6!66 #L 1 1Q 6 N;N F 6==??##H!)7++xX";/#)+#6CP^PdPdPfPfLgLg__PVP\P\P^P^___%7IIV\\^^III F h(((	$*x 0hTZ[eTfsvw|  ~F  xG  tH  tH  I  I  X]  ^  ^  ^  _  _  _11ar   __main__r   Fz: )rj   ri   errorr   )file)r   r   r   r   )r   r   r   r   r   r   )r   r   r&   r   r   r)   )r   rJ   )
__future__r   r   r8   r>   r   sysr;   pathlibr   __file__r#   r+   r"   r   r   r(   rI   r   __name__exit	Exceptionr'   r   r9   typestderrr_   r   r   <module>r      s   " " " " " "   				 				 



       tH~~'*55         >  >  >  > B z   jdjH%TTRUYYM_JhJhcfJhJhiix}~~~  FI  FP  	Q  	Q  	Q  	Q s   )B CA	CC