
    L:i,                     D   % S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	  S SK
JrJr  S SKJr  S SKJrJrJrJrJr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJrJr  S SKJrJ r J!r!J"r"J#r#J$r$J%r%J&r&  Sq'Sq(Sq)\\*   \+S	'    S S
K,J-r-   S SK/J0r1  Sq2Sq3Sq4\\*   \+S'   \Rj                  " 5       r6SS0r7\\8\\   4   \+S'   \Rj                  " 5       r90 r:\\8\;4   \+S'    \;" \Rx                  " SS5      5      r=\" \?5      R                  5       R                  rB\BS-  rC\BS-  rDS\4S jrE\E" 5       rFSrG0 rH\\8\\8\4   4   \+S'   \Rj                  " 5       rISrJ1 SkrK\Rx                  " SS5      rL\Rx                  " SS5      rM\Rx                  " SS 5      rN\Rx                  " S!S"5      rO\Rx                  " S#S$5      rP\Rx                  " S%S&5      rQ\Rx                  " S'S(5      rR\Rx                  " S)S*5      rS\BS+-  rT\TS,-  rU\Rj                  " 5       rV\BS--  rW\BS.-  rXS"rYS/rZ0 r[\\8\\8\4   4   \+S0'   \BS1-  r\0 q]\\8\84   \+S2'   Sq^\\_   \+S3'   \Rj                  " 5       r`/ qa\\8   \+S4'   Sqb\\_   \+S5'   \Rj                  " 5       rcSSS6S7.rd\\8\4   \+S8'   \Rj                  " 5       re \;" \Rx                  " S9S:5      5      rf0 qg\\8\4   \+S<'   Sqh\\_   \+S='   \Rj                  " 5       ri0 rj\\8\\_\84   4   \+S>'   \Rj                  " 5       rk0 rl\\8\\8\4   4   \+S?'   \Rj                  " 5       rmS@\8S\84SA jrnS\\8\84   4SB jroSC\\8\84   SS4SD jrpS\\8   4SE jrqSF\\8   SS4SG jrrSSH jrsSSI jrtSJ\8S\u4SK jrvSJ\8S@\8S\u4SL jrwSSM jrxSJ\8S\84SN jrySO\8S\\8   4SP jrz\s" 5         \t" 5         S\\8\4   4SQ jr{SR\\8\4   SS4SS jr|SSJ\8ST\8SU\_SS4SV jjr}SW\8SX\SS4SY jr~SZ\\8\4   SS4S[ jrSS\.S]\S^\uS\84S_ jjrS`\8S\84Sa jrS\\8\\8\\8\84   4   4   4Sb jrS\\\8\4      4Sc jrSSd\uS\\8\\8\\8\84   4   4   4Se jjrSSf jrSg\8S\\\\8\4   4   4Sh jrSi\\8\4   S\4Sj jrSi\\8\4   Sk\8S\4Sl jrSg\8Sk\8S\84Sm jrSg\8Sk\8S\84Sn jrSW\8Sg\8Sk\8SS4So jrSW\8S\\\8\4      4Sp jrS`\8S\4Sq jrS\4Sr jrS\4Ss jrSSt jrSSu\uS\4Sv jjrSw\Sx\8S\84Sy jrSw\Sx\8S\84Sz jrSS{\8S|\\8   S\\   4S} jjrS~\S\\8\84   4S jrS\8S\84S jrS\8S\8S\\8\4   4S jrS\\8\4   S\\8   4S jrSW\8S\\8   S\\8\84   S\8SS4
S jr " S S\5      rSS jr\S:X  a  \" 5         gg! \. a    Sr- GNf = f! \. a    Sr1 GNf = f! \> a    Sr= GNf = f! \> a    S;rf GNf = f)    N)
HTTPStatus)SimpleHTTPRequestHandlerThreadingHTTPServer)Path)DictAnyListOptionalTuple)datetimetimezone)HighlightCandidateSegment
CropWindowprepare_highlight_subtitlesexport_highlight_variantforce_uppercase_titlesanitise_title_textisoformat_sao_pauloF_TIKTOK_IMPORT_ERROR)StaleElementReferenceException)ValidationError_INSTAGRAM_IMPORT_ERRORclient_INSTAGRAM_CLIENT_STATE_RECENT_POSTSSOCIAL_POST_DEDUP_TTL180g     f@corteszinstagram_session.jsonreturnc                  t   [         R                  " S5      =(       d    [         R                  " S5      n U (       a  [        U 5      R                  5       $ [        S-  [        S5      /nU H5  n[        U5      R                  5       nUR                  5       (       d  M3  Us  $    [        S-  R                  5       $ )N	INBOX_DIR	INPUT_DIRinz/home/user157/in)osgetenvr   
expanduserROOT_DIRexists)	env_valuecandidate_paths	candidateexpandeds       dashboard_server.py_resolve_inbox_dirr/   ?   s    		+&@"))K*@II))++$-?(@AO$		?--/??O % tO''))    i@  
JOB_STATUSi  >   .ass.mp4.mxf.srt.txt.jsonTIKTOK_USERNAMEzjoaoaayturmsiwbn1836@gmail.comTIKTOK_PASSWORDz
tvthathi1!INSTAGRAM_USERNAMEztesteia-th@hotmail.comINSTAGRAM_PASSWORDtvthathiPORTAL_API_URLz)https://thmais.com.br/wp-json/wp/v2/postsPORTAL_USERNAMEzMatheus HelmerPORTAL_PASSWORDzRk1G VoDe s6ex tyR1 gnb2 McngPORTAL_STATUSdraftlogszsocial_posts.jsonlz
users.jsonzadmins.jsoni  AUTH_TOKENSzuser_stats.json_USERS_CACHE_USERS_MTIME_ADMINS_CACHE_ADMINS_MTIME        )data	signatureexpires_CORTES_CACHECORTES_CACHE_TTLz1.5g      ?_USER_STATS_CACHE_USER_STATS_MTIME_CORTES_TEXT_CACHE_TITLE_JOBSpasswordc                 h    [         R                  " U R                  S5      5      R                  5       $ )Nutf-8)hashlibsha256encode	hexdigest)rR   s    r.   hash_passwordrY      s#    >>(//'23==??r0   c            	         [            [        R                  5       (       d!  [        R	                  5         S q0 sS S S 5        $  [        R                  5       n U R                  n[
        U:X  a  [        [        5      sS S S 5        $  [        R                  " [        R                  SS95      n[        U[        5      (       a9  UR                  5        VVs0 s H  u  p4[        U5      [        U5      _M     snnqO0 q Uq[        [        5      sS S S 5        $ ! [         a$    [        R	                  5         S q0 s sS S S 5        $ f = fs  snnf ! [        R                    a    0 q Nif = f! , (       d  f       g = fNrT   encoding)_USERS_LOCKUSERS_DB_PATHr)   rD   clearrE   statst_mtime_nsOSErrordictjsonloads	read_text
isinstanceitemsstrJSONDecodeError)ra   current_mtimerI   kvs        r.   
load_usersro      s.   	##%% L	 

	 %%'D ,,M
 =(% 
	::m55w5GHD$%%;?::<H<41AA<H! %L!/ 
  	 LI 
	  I ## 	L	) 
sr   1E+ D#E+AE!E	6E:E+;E=E+"E:E+EE+	EE(%E+'E((E++
E9usersc                    [         R                  [        R                  " U SSS9SS9  [           [        U 5      q [         R                  5       R                  q	S S S 5        g ! [         a    S q	 Nf = f! , (       d  f       g = fNF   ensure_asciiindentrT   r\   )r_   
write_textre   dumpsr^   rd   rD   ra   rb   rE   rc   rp   s    r.   
save_usersrz      sm    TZZE!LW^_	E{	 (--/;;L 
  	 L	 	 
(   A5A##A2/A51A22A55
Bc                     [            [        R                  5       (       d  / qS q/ sS S S 5        $  [        R                  5       n U R                  n[        U:X  a  [        [        5      sS S S 5        $  [        R                  " [        R                  SS95      n[        U[        5      (       a4  U Vs/ s H%  n[        U[        5      (       d  M  [        U5      PM'     snqO/ q Uq[        [        5      sS S S 5        $ ! [         a    / qS q/ s sS S S 5        $ f = fs  snf ! [        R                   a    / q NVf = f! , (       d  f       g = fr[   )_ADMINS_LOCKADMINS_DB_PATHr)   rF   rG   ra   rb   rc   listre   rf   rg   rh   rj   rk   )ra   rl   rI   xs       r.   load_adminsr      s   	$$&&M M	 

	!&&(D ,,M
 M)& 
	::n666HID$%%15 LAAs9KQ L " &M"/ 
  	M MI 
	 !M ## 	M	) 
sw   E DE4A D%4D D  D%#E$D%&EDEDE D%%D>;E=D>>E
Eadminsc                 4   [        [        U 5      5      n[        R                  [        R
                  " USSS9SS9  [           [        U5      q [        R                  5       R                  qS S S 5        g ! [         a    S q Nf = f! , (       d  f       g = frr   )sortedsetr~   rw   re   rx   r}   r   rF   ra   rb   rG   rc   )r   uniques     r.   save_adminsr      s{    CK FdjjeANY`a	V	!*//1==M 
  	! M	!	 
s*   B	A77BB	BB		
Bc                  h    [        5       n [        U ;  a  [        S5      U [        '   [        U 5        g g )Ntvthathi123)ro   MASTER_USERrY   rz   ry   s    r.   ensure_default_userr      s-    LE%*=9k5  r0   c                  n    [        5       n [        U ;  a!  U R                  [        5        [        U 5        g g N)r   r   appendr   )r   s    r.   ensure_default_adminr      s*    ]F& k"F !r0   usernamec                 B    U (       d  gU [         :X  a  gU [        5       ;   $ )NFT)r   r   )r   s    r.   is_adminr      s     ;{}$$r0   c                 T    [        5       nUR                  U 5      nU[        U5      :H  $ r   )ro   getrY   )r   rR   rp   storeds       r.   verify_credentialsr      s'    LEYYx F]8,,,r0   c                      [         R                   " 5       n [        R                  5        VVs/ s H  u  pUR                  SS5      U :  d  M  UPM!     nnnU H  n[        R	                  US 5        M     g s  snnf )NrK   r   )timerC   ri   r   pop)nowtokenrI   expireds       r.   cleanup_tokensr      s`    
))+C(3(9(9(;\(;txx	ST?UX[?[u(;G\t$  ]s   A6A6c                     [        5         [        R                  " S5      nU [        R                  " 5       [        -   S.[
        U'   U$ )N    )userrK   )r   secrets	token_hexr   TOKEN_TTL_SECONDSrC   )r   r   s     r.   issue_tokenr      s8    b!E"*tyy{EV7VWKLr0   r   c                     U (       d  g [        5         [        R                  U 5      nU(       d  g US   [        R                  " 5       :  a  [        R	                  U S 5        g [        UR                  S5      5      $ )NrK   r   )r   rC   r   r   r   rj   )r   rI   s     r.   validate_tokenr      sY    ??5!DI$t$txx  r0   c                  8   [            [        R                  5       (       d  0 qS q0 sS S S 5        $  [        R                  5       n U R                  n[        U:X  a  [        [        5      sS S S 5        $  [        R                  " [        R                  SS95      n[        U[        5      (       a  UqO0 q Uq[        [        5      sS S S 5        $ ! [         a    0 qS q0 s sS S S 5        $ f = f! [        R                   a    0 q NQf = f! , (       d  f       g = fr[   )_USER_STATS_LOCKUSER_STATS_PATHr)   rN   rO   ra   rb   rc   rd   re   rf   rg   rh   rk   )ra   rl   rI   s      r.   load_user_statsr     s   	%%'' " $	 
	
	"'')D ,,M
 -)* 
		#::o777IJD$%%$(!$&! *%&/ 
	  	 " $I 
		 ## 	# "	#) 
	s^   D CD4>C/2D3C/5DC, D+C,,D/DDDD
Dstatsc                    [         R                  [        R                  " U SSS9SS9  [           [        U 5      n [         R                  5       R                  nS S S 5        g ! [         a    S n Nf = f! , (       d  f       g = frr   )	r   rw   re   rx   r   rd   ra   rb   rc   )r   rN   rO   s      r.   save_user_statsr   ,  sr    tzz%eANY`a	 K	% / 4 4 6 B B 
	  	% $	%	 
	r{   keyamountc                     [        5       n[        UR                  U 5      [        5      (       a  UR                  U 5      O0 nUR                  US5      nXR-   XA'   XCU '   [	        U5        g )Nr   )r   rh   r   rd   r   )r   r   r   r   
user_entrycurrents         r.   increment_user_statr   6  sY    E(2599X3F(M(M8$SUJnnS!$G&JO (OEr0   job_idmessagec                 ^   [        U5      nU(       d  g UR                  SS5      R                  S5      n[           [        R                  U S/ S.5      nUR                  S/ 5      nUR                  U5        [        U5      [        :  a
  US [        * 2	 S S S 5        g ! , (       d  f       g = f)N 
runningstatusrB   rB   )	rj   replacerstripJOB_LOCKr1   
setdefaultr   lenLOG_HISTORY_LIMIT)r   r   textentryrB   s        r.   append_job_logr   ?  s    w<D<<b!((.D	%%fB.OP+Dt9(((((() 
s   AB
B,r   c                    [         R                  " U SS9n[        R                  SSS9  [           [
        R                  SSS9 nUR                  US-   5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)	NFru   Tparentsexist_okarT   r\   r   )re   rx   LOGS_DIRmkdirPOST_LOG_LOCKPOST_LOG_PATHopenwrite)r   linefps      r.   append_post_logr   L  se    ::e%0DNN4$N/	g6"HHTD[! 7 
66 
s#   A<A+A<+
A9	5A<<
B
strippathr   c                    U R                  5       nUR                  n[        U 5      n[           [
        R                  U5      nU(       a  US   U:X  a  US   nO U R                  SS9nX64[
        U'   S S S 5        U(       a  WR                  5       $ W$ ! [         a     gf = f! [         a    Sn N?f = f! , (       d  f       NI= f)Nr   r      rT   r\   )	ra   rb   rc   rj   _CORTES_TEXT_CACHE_LOCKrP   r   rg   r   )r   r   ra   rl   r   cachedr   s          r.   _read_text_cachedr   R  s    yy{(( d)C	 #'',fQi=0!9D@~~w~7 ,9*?"3' 
! !4::<*d*     
!	 s@   B ,B8B&+
B8
B#"B#&B52B84B55B88
Cfilenamec                 ~   [         R                  R                  U 5      u  p[        R                  " SSU[        R
                  S9n[        R                  " SSU[        R
                  S9n[        R                  " SSU[        R
                  S9n[        R                  " SSU[        R
                  S9n[        R                  " SSU[        R
                  S9n[        R                  " SSU[        R
                  S9n[        R                  " S	SU[        R
                  S9n[        R                  " S
SU5      nU$ )Nz_(zoom|fit)_tiktok$r   )flagsz_tiktok$z_(zoom|fit)$z	_caption$z_ass$z_meta$z_portal$z\s+_)r%   r   splitextresub
IGNORECASE)r   baser   s      r.   normalize_base_namer   h  s    ggx(GD66("d"--HD66+r4r}}=D66/2t2==AD66,D>D66(BBMM:D66)RR]];D66+r4r}}=D66&#t$DKr0   c                  X   0 n 0 n[         R                  5       (       d  U $ [        [         R                  5       5       GHU  nUR	                  5       (       d  M  UR
                  R                  5       [        ;  a  M?  UR                  n[        U5      nU R                  U0 SUSSSS.5      nUR                  5       nUR                  S5      (       a   [        USS9nUR                  S5      (       ae  [        R                  " U5      n[!        U["        5      (       a4  S H(  n	X;   d  M
  [%        X   5      R'                  5       US'     O   SUS'   OSUS'   OXuS'    GM#  UR                  S	5      (       a   [        U5      n
[        R                  " U
=(       d    S
5      n[!        U["        5      (       aj  UR-                  S5      (       a  [%        US   5      R'                  5       US'   UR-                  S5      (       a  [%        US   5      R'                  5       US'   GM  [.        R0                  " SU5      nU(       a   [        USS9XR3                  S5      '   GM#  UR                  S5      (       a   [        USS9US'   GMJ  SU 3US   U'   GMX     [.        R4                  " S5      nU R7                  5        Hh  u  pNUR-                  S5      (       a  M  UR1                  U5      nU(       d  M7  UR3                  S5      nUR-                  US5      nU(       d  Mc  UUS'   Mj     U $ ! [(        [        R*                  4 a	    SUS'    GNf = f! [(        [        R*                  4 a     GNNf = f! [(         a    SXR3                  S5      '    GN5f = f! [(         a	    SUS'    GN$f = f)Nr   )filestitleslugsourcegenerated_bygenerated_at
_title.txtTr   {)r   TITLETitler   z
_meta.json{}r   r   z+corte_(\d{8}_\d{6}(?:_[^_]+)?)_source\.txt$r   z_source.txtr   z/cortes/r   z ^corte_(\d{8}_\d{6}(?:_[^_]+)?)_)
CORTES_DIRr)   r   iterdiris_filesuffixlowerALLOWED_SUFFIXESnamer   r   endswithr   
startswithre   rf   rh   rd   rj   r   rc   rk   r   r   matchgroupcompileri   )entries
source_mapr   r   r   r   
name_lower	raw_titlerI   r   meta_raw	meta_datamatch_sourcepattern_run_taginfomatch_rtrun_tagsource_names                     r.   build_cortes_listingr    sW   )+G!#Jz))+,||~~;;&66yy"4("" " "

 ZZ\
|,,$-d$?	'',,::i0D!$--#>C"{14TY1E1E1Gg % $?
 .0E'N)+g%.'N |,,	,T2 JJx'748	i.. }}^4403In4M0N0T0T0Vn- }}^4403In4M0N0T0T0Vn- xx NPZ[74EdRV4W
--a01 }--%"3D"Eh !)$0gt -D jj!DEOmmo
88H"((.8nnQ'G$.."5K{!,X & NS T112 $!#g$ T112   746
--a017  %"$h%sb   AL+*L+
L+L+L+7B)MM27N+MMM/.M/2NNN)(N)c            	      N   / n [         R                  5       nUR                  5       (       d  U $ / n UR                  5        H=  n UR	                  5       nUR                  5       (       d  M+  UR                  X445        M?     UR                  S SS9  U Hi  u  pVU R                  UR                  UR                  [        R                  " UR                  [        R                  5      R!                  5       S.5        Mk     U $ ! [
         a     M  f = f! [
         a    U s $ f = f)Nc                      U S   R                   $ )Nr   )st_mtime)items    r.   <lambda>"list_input_files.<locals>.<lambda>  s    T!W%5%5r0   T)r   reverse)r   sizemodified)r"   r'   r)   r   ra   rc   r   r   sortr   st_sizer   fromtimestampr  r   utc	isoformat)r   
inbox_path
candidatesr   stat_resultr   ra   s          r.   list_input_filesr    s   "$E%%'J46J
'')E#jjl ==??u23 * OO5tOD 
		$224==(,,OYY[	
 ! L!  
  s5   D D-D 
DD DD D$#D$forcec                 H   Sn[         R                  5       (       a-   [         R                  5       nUR                  UR                  4n[        R                  " 5       n[           [        S   nU (       d(  Ub%  [        S   U:X  a  U[        S   :  a  UsSSS5        $ SSS5        [        5       n[        S:  a  [        OSn[           U[        S'   U[        S'   X6-   [        S'   SSS5        U$ ! [
         a    Sn Nf = f! , (       d  f       Nj= f! , (       d  f       U$ = f)zORetorna o catalogo de cortes reutilizando cache recente para evitar I/O pesado.NrI   rJ   rK   r   g      ?)r   r)   ra   rb   r  rc   r   _CORTES_CACHE_LOCKrL   r  _CORTES_CACHE_TTL)r  rJ   ra   r   cached_datar   ttls          r.   get_cortes_listing_cachedr$    s    +/I	??$D))4<<8I ))+C	#F+'k*i7mI.. 
		 #$G014
#C	 'f%.k"#&9i  
 N%  	I	 
	 
	 Ns)   ,C/ $/DD/C>=C>
D
D!c                  z    [            S [        S'   S [        S'   S[        S'   S S S 5        g ! , (       d  f       g = f)NrI   rJ   rH   rK   )r   rL    r0   r.   invalidate_cortes_cacher'    s/    	 $f%)k"#&i  
		s   ,
:base_keyc                 |   [         U  S3-  R                  5       nUR                  5       (       d  [        S5      e UR	                  SS9n[
        R                  " U=(       d    S5      n[        U[        5      (       d  [        S5      eX4$ ! [        [
        R                  4 a  n[        SU 35      UeS nAff = f)Nz
_data.jsonz9Dados do corte nao encontrados para reprocessar o titulo.rT   r\   r   z Falha ao ler metadata do corte: z-Metadata do corte esta em formato inesperado.)r   resolver)   FileNotFoundErrorrg   re   rf   rc   rk   RuntimeErrorrh   rd   )r(  	meta_pathrawrI   excs        r.   _load_highlight_metadatar0    s    
*55>>@I [\\N!!7!3zz#+& dD!!JKK?	 T))* N=cUCD#MNs   .B B;'B66B;metac                    / nU R                  S5      n[        U[        5      (       a=  UR                  5       (       a(  UR	                  [        U5      R                  5       5        U R                  S5      n[        U[        5      (       a  UR                  5       (       a  [        UR                  5       5      R                  nUR	                  [        U-  R                  5       5        UR	                  [        U-  R                  5       5        UR	                  [        U5      R                  5       5        U H  nUR                  5       (       d  M  Us  $    [        S5      e)N
input_path
input_namezEVideo original nao foi encontrado para reprocessar o titulo do corte.)r   rh   rj   r   r   r   r'   r   r"   r(   r)   r+  )r1  r  raw_pathr4  	base_namer,   s         r.   _resolve_video_sourcer7  $  s   Jxx%H(C  X^^%5%5$x.3356,'J*c""z'7'7'9'9))+,11	9y0<<>?8i/;;=>$y/4467	   c
ddr0   	new_titlec                    U R                  S5      =(       d    / nU(       d  [        S5      e/ nU H  n[        U[        5      (       d  M  UR	                  [        [        UR                  SS5      5      [        UR                  SS5      5      [        UR                  SS5      5      [        UR                  SS5      5      [        UR                  S	S5      5      S
95        M     U(       d  [        S5      eU R                  S5      nS n[        U[        5      (       a  [        [        UR                  SS5      5      [        UR                  SS5      5      [        UR                  SS5      5      [        UR                  SS5      5      [        UR                  SS5      5      [        UR                  SS5      5      [        UR                  SS5      5      S9n[        [        U R                  SS5      5      [        U R                  SS5      5      [        U R                  SS5      5      U[        U R                  SS5      5      U[        U R                  SS5      5      US9nU$ )NsegmentszAMetadata do corte nao contem segmentos para reconstruir o titulo.startrH   endr   r   avg_logprobno_speech_prob)r;  r<  r   r=  r>  z7Nao ha segmentos suficientes para reconstruir o titulo.cropr   r   ywidthheight
confidence
detectionssamples)r   r@  rA  rB  rC  rD  rE  scorereasonorigin)r;  r<  rF  r:  rG  r   rH  r?  )r   r,  rh   rd   r   r   floatrj   r   intr   )r1  r8  segments_datar:  r  	crop_datar?  	highlights           r.   _build_highlight_from_metarN  5  s   HHZ(.BM^__ H$%%DHHWc23$((5#./&"-.!$((=#">?$TXX.>%DE	
  TUU I!%D)T"")--Q'()--Q'(immGQ/0y}}Xq12Y]]<=>9==q9:	i34
 #DHHWc*+$((5#&'DHHWc*+488Hb)*488Hb)*	I r0   c                    [        U 5      u  p#[        U5      n[        X15      n[        UR	                  S5      =(       d    [
        5      R                  5       nUR                  SSS9  UR	                  S5      =(       d    U n[        XVU5      u  ppUR	                  S5      =(       d    0 n[        UR	                  SS5      5      n[        UR	                  SS5      5      nU(       a  [        XEXgSUS	5        U(       a  [        UUUUSU	SUS
9  XS'   [        5       US'    UR                  [        R                  " USSS9S-   SS9  Xg S3-  n UR                  [        R                  " SU0SS9S-   SS9  ["           [$        R'                  [)        U5      S 5        S S S 5        [+        5         U$ ! [         a  n[!        SU 35         S nANS nAff = f! , (       d  f       N?= f! [         a  n[!        SU 35         S nAU$ S nAff = f)N
output_dirTr   r6  generated_formatszoomfitFfill)title_ass_pathr   
updated_atrs   rt   r   rT   r\   z/[titulo] Falha ao atualizar metadata do corte: r   r   z,[titulo] Falha ao salvar titulo atualizado: )r0  r7  rN  r   r   r   r'   r   r   boolr   r   rw   re   rx   rc   printr   rP   r   rj   r'  )r(  r8  r-  r1  video_sourcerM  rP  r6  ass_fill_pathass_fit_pathr   fit_title_pathrQ  zoom_requestedfit_requestedr/  
title_paths                    r.   regenerate_cut_with_new_titler`  a  s   .x8OI(.L*4;Idhh|,:
;FFHJTD1%1I5Py62M !45;+//=>N*..ue<=M *QWYfhno )		
 M,.DGTZZ5KdR]de :66J"djj'9)=ERUYYdkl %""3z?D9 %!  G?uEFFG %$  D<SEBCC Ds<   !'F2 (G( > G2
G<GG
G%(
H2HHc                     [        [        R                  " 5       5      nUU USSS S S.n[           U[        U'   S S S 5        [
        R                  " [        X U4SS9nUR                  5         U$ ! , (       d  f       N<= f)Nqueuedr   )r   r(  r   r   error
started_atfinished_atTtargetargsdaemon)	rj   uuiduuid4_TITLE_JOBS_LOCKrQ   	threadingThread_run_title_jobr;  )r(  r8  r   payloadthreads        r.   enqueue_title_jobrr    ss    FG 
%F 
^6Y:W`deF
LLNM	 
	s   
A//
A=c                    [            [        R                  U 5      nU(       a  SUS'   [        5       US'   S S S 5         [	        X5      nSU[        5       SS.n[            [        R                  U 5      nU(       a  UR                  U5        S S S 5        g ! , (       d  f       Nf= f! [
         a!  nS[        U5      [        5       S.n S nANtS nAff = f! , (       d  f       g = f)	Nr   r   rd  	completedr   )r   r   re  rc  failed)r   rc  re  )rl  rQ   r   r   r`  	Exceptionrj   update)r   r(  r8  jobfinal_titleresultr/  s          r.   ro  ro    s    	oof%%CM 3 5C	 


3HH! .0	
 
oof%JJv 
	' 
	  
X.0

 
	s.   /BB' .C
B$'
C1CC
C#c                     [            [        R                  U 5      nU(       a  [        U5      OS sS S S 5        $ ! , (       d  f       g = fr   )rl  rQ   r   rd   )r   rx  s     r.   get_title_jobr|    s*    	oof%tCyT 
		s	   ):
Ac                    [        [        U =(       d    S5      5      R                  nU(       d  [        S5      e[        U-  R                  5       n[        R                  5       n UR                  U5        UR                  5       (       d  [        SU 35      eUR                  5       (       d  [        SU 35      eU$ ! [         a  n[        S5      UeS nAff = f)Nr   zNome de arquivo invalidozArquivo fora da pasta corteszArquivo nao encontrado: zEntrada nao eh arquivo: )
r   rj   r   
ValueErrorr   r*  relative_tor)   r+  r   )r   cleanedrg  cortes_rootr/  s        r.   resolve_corte_filer    s    3x~2&',,G3447"++-F$$&KB;' ==??":7) DEE>>":7) DEEM  B78cABs   &B? ?
C	CCc                      [         b  [         $ [        (       a  [        S5      [        eSq SSKJn   U q [         $ ! [         a  nUq[        S5      UeS nAff = f)Nz{Dependencias do TikTok nao instaladas. Execute 'pip install tiktok-uploader' e garanta que o Chromedriver esteja acessivel.Tr   )upload_video)TikTokUploadVideo_TIKTOK_IMPORT_ATTEMPTEDr,  r   tiktok_uploader.uploadr  rv  )uploaderr/  s     r.   ensure_tiktok_uploaderr    sx    $  =
 $	$  $C !  "=
 	   : 
AAAc                      [         b  [         $ [        (       a  [        S5      [        eSq SSKJn   U q [         $ ! [         a  nUq[        S5      UeS nAff = f)Nz;Instagrapi nao instalada. Execute 'pip install instagrapi'.Tr   )Client)InstagramClient_INSTAGRAM_IMPORT_ATTEMPTEDr,  r   
instagrapir  rv  )
client_clsr/  s     r.   ensure_instagram_clientr    sh    """XY_vv"&c3 !O	  c"%XY_bbcr  c                      [            S [        S'   S S S 5         [        R                  SS9  g ! , (       d  f       N#= f! [         a     g f = f)Nr   T
missing_ok)_INSTAGRAM_CLIENT_LOCKr   INSTAGRAM_SESSION_PATHunlinkrv  r&  r0   r.   _invalidate_instagram_sessionr    sG    	,0) 
 %%%6 
 	  s   
.? 
<
AAforce_refreshc                    [         (       a  [        (       d  [        S5      e[        5       n[           [
        R                  S5      nUb  U (       d  UsS S S 5        $ U" 5       n[        R                  5       (       a9   [        R                  " [        R                  SS95      nUR                  U5        SUl        UR!                  [         [        5         [        R#                  [        R$                  " UR'                  5       5      SS9  U[
        S'   UsS S S 5        $ ! [         a    [        R                  SS9   Nf = f! [         a     NCf = f! , (       d  f       g = f)Nz*Credenciais do Instagram nao configuradas.r   rT   r\   Tr  )r      )r:   r;   r,  r  r  r   r   r  r)   re   rf   rg   set_settingsrv  r  delay_rangeloginrw   rx   get_settings)r  r  r   r   settingss        r.   get_instagram_clientr    s0   %7%7GHH(*J	(,,X6m 
 	 !((**?::&<&F&FPW&F&XY##H- $');<	"--

6..01G . 
 -3)) 
 	  ?&--->?  		# 
 	sY   !E E>8D"6!E6E
E"E?EEE
EEEE
E#
video_pathcaptionc           	      r   [        5       n[        (       a  [        (       d  [        S5      e[        S-  nUR                  5       (       a  [        U5      OSnS n[        S5       H<  n U" [        U 5      U=(       d    S[        [        US9n[        U=(       d    S5      s  $    [        S
U 35      Ue! [         ay  nUn[        U5      R                  5       n	SU	;   =(       d    [        =(       a    [        U[        5      n
US:X  a#  U
(       a  [        R                  " S	5         S nAM   S nA  M  S nAff = f)Nz'Credenciais do TikTok nao configuradas.ztiktok_cookies.txtr   rs   )r   descriptionr   rR   cookiesokzstale elementr   r  zFalha ao postar no TikTok: )r  r8   r9   r,  r(   r)   rj   rangerv  r   r   rh   r   sleep)r  r  r  cookies_pathcookies_arg
last_errorattemptrz  r/  r   recoverables              r.   post_to_tiktokr    s   %'H?//DEE22L'3':':'<'<#l#"K&*J8	Z#Mr((#F v~&& * 4ZLA
B
R  
	J#hnn&G)W4 . Ds$BC  !|

1
	s   (7B33
D6=A'D11D6c           	      8   S n[        S5       HK  nUS:  n [        US9n UR                  [        U 5      U=(       d    S5      n[        U=(       d    S	5      s  $    [        SU 35      Ue! [         a7  nUn[        SUS-    SU 35        [        R
                  " S5         S nAM  S nAff = f! [         a  nUn[        S
US-    SU 35        [        (       a&  [        U[        5      (       a  [        S5         S nA  g UR                  [        U 5      U=(       d    S5      n[        U=(       d    S	5      s S nAs  $ ! [         aF  n	U	n[        SUS-    SU	 35        [        5         [        R
                  " S5         S n	A	 S nAGM~  S n	A	ff = fS nAff = f)Nrs   r   )r  z[instagram] login tentativa r   z/2 falhou: r  r   r  z"[instagram] clip_upload tentativa zy[instagram] Resposta do Instagram mudou (pydantic ValidationError). Assumindo upload bem-sucedido para evitar duplicacao.#instagram_clip_upload_schema_changez,[instagram] video_upload fallback tentativa zFalha ao postar no Instagram: )r  r  rv  rX  r   r  clip_uploadrj   PydanticValidationErrorrh   video_uploadr  r,  )
r  r  r  r  r  r   r/  upload_resultclip_exc	video_excs
             r.   post_to_instagramr  ;  s|   &*J8!	)>F	"..s:2NM},-- : 7
|D
E:U3  	J01[NOJJqM		  	!J6w{m;xjYZ&&:h@W+X+XL = & 3 3C
OW]PR S=0D11 &
DWq[MQ\]f\ghi-/

1		sY   	A,7B0,
B-6,B((B-0
F:AF7E9F
F6FFFFF
video_namehintc                 "   U(       a   [        U5      $ [        U 5      nU(       a  U S3n [        U5      $ g ! [         a     N0f = f! [         a     Of = f[        R	                  U S35       H  nUR                  5       (       d  M  Us  $    NZ)Nz_portal.txtz*_portal.txt)r  rv  r   r   globr   )r  r  r   r,   r   s        r.   locate_portal_filer  ]  s    	%d++ z*DfK(		%i00   		  		OOtfL$9:D||~~ ;s    
8 
A 
AA
AAarticle_pathc                 b   U R                  SS9nUR                  SS5      nUR                  S5      n[        S [	        U5       5       S5      nUS:X  a  U R
                  SS.$ X4   R                  5       =(       d    U R
                  nSR                  X4S	-   S  5      R                  5       nXVS.$ )
NrT   r\   z
r   c              3   X   #    U  H   u  pUR                  5       (       d  M  Uv   M"     g 7fr   r   ).0ir   s      r.   	<genexpr>&load_portal_article.<locals>.<genexpr>t  s     B!1gaTZZ\!1s   *	*r   )r   bodyr   )rg   r   splitnext	enumeratestemr   join)r  r.  
normalizedlinesidxr   r  s          r.   load_portal_articler  p  s    

 
 '
 
2CVT*JT"E
B5!1BB
GC
by%**B77J3,"3"3E99U79%&,,.D))r0   r  c                 N   U R                  5       nU(       d  g[        R                  " SU5      n/ nU H  nUR                  5       nU(       d  M  UR                  S5       Vs/ s H=  oUR                  5       (       d  M  [        R                  " UR                  5       5      PM?     nnSR                  U5      =(       d    [        R                  " U5      nUR                  SU S35        M     SR                  U5      =(       d    S[        R                  " U5       S3$ s  snf )Nz<p></p>z\n\s*\nr   z<br/>z<p>z</p>r   )r   r   r  htmlescaper  r   )r  contentblockspartsblockr   r  	paragraphs           r.   _portal_html_from_textr  |  s    jjlGXXj'*FE7<{{47HY7HtJJL*TZZ\*7HYLL'=4;;u+=	s9+T*+  775>=s4;;w#7"8== Zs   #D"?(D"r   c                    [         (       d  [        S5      e[        (       a  [        (       d  [        S5      eU R	                  5       =(       d    S[        U5      [        =(       d    SR                  5       S.n[        R                  " USS9R                  S5      n[         S	[         3n[        R                  " UR                  S
S5      5      R                  S
5      nSU 3SS.n[        R                  R!                  [         X6SS9n [        R                  R#                  USS9 nUR%                  5       n	 [        R&                  " U	R                  S5      5      sS S S 5        $ ! [        R(                   a    SU	R                  SSS90s sS S S 5        $ f = f! , (       d  f       g = f! [        R*                  R,                   ax  n
U
R%                  5       R                  SSS9R	                  5       nU=(       d"    U
R.                  =(       d    SU
R0                   3n[        SU
R0                   SU 35      U
eS n
A
f[        R*                  R2                   a  n
[        SU
 35      U
eS n
A
ff = f)NzPORTAL_API_URL nao configurada.z'Credenciais do portal nao configuradas.zMateria automaticarA   )r   r  r   Fr   rT   :asciiignorezBasic zapplication/json)AuthorizationContent-TypePOST)rI   headersmethod   )timeoutr.  )errorszHTTP zPortal HTTP z: zPortal indisponivel: )r=   r,  r>   r?   r   r  r@   r   re   rx   rW   base64	b64encodedecodeurllibrequestRequesturlopenreadrf   rk   rc  	HTTPErrorrG  codeURLError)r   r  rp  rI   raw_credentialsr   r  r  response
body_bytesr/  detailr   s                r.   post_portal_articler    s   ><==?//DEE6"6)$/ +G224G
 ::gE299'BD()?*;<O_33GXFGNNwWE!%)*G nn$$^$X^$_GC^^##GR#8H!JLzz*"3"3G"<= 98 '' Lz000JKK 98L	 98 <<!! J""78"<BBD<CJJ<E#((*<\#((2gY?@cI<<   C23%89sBCsg   F1 +F =$E+!	F1 +&FF 	F1 FF  
F.*F1 .F1 1I7A3I!I7#I22I7rp  c                 ~   [         R                  " [        S-  5      /n[        U R	                  SS5      =(       d    S5      R                  5       nU(       a  USU/-  nOUR                  S5        U R	                  S5      (       a  US[        U S   5      /-  nU R	                  S5      (       a  US	[        U S   5      /-  n[        U R	                  S
S5      =(       d    S5      R                  5       R                  5       nU(       d  SnUS;   a  USU/-  nU R	                  S5      (       a  US[        U S   5      /-  nU R	                  S5      (       a  US[        U S   5      /-  nU R	                  S5      (       a  US[        U S   5      /-  nU R	                  S5      (       a  US[        U S   5      /-  nU$ )Nzmain.pyinputr   z--inputz--batch-allrP  z--output-dirtopz--topvariantrR  >   rS  bothrR  z	--variantmodelz--modelmin_durationz--min-durationmax_durationz--max-durationlangz--lang)r%   fspathr(   rj   r   r   r   r   )rp  rh  input_valuer  s       r.   build_cli_argsr     s   yyI!567Dgkk'2.4"5;;=KK((M"{{<  W\%:!;<<{{5#gen-..'++i,2399;AACG))g&&{{7C 0122{{>""!3w~'>#?@@{{>""!3w~'>#?@@{{63wv/00Kr0   cli_args
prompt_envr   c                    [         R                  R                  5       nU(       a  UR                  U5        UR	                  SS5        UR	                  SS5        X4S'   [         R
                  " [        [        R                  5      5      /U-   n[        U S5        [        U SSR                  U5       35        S n [        R                  " U[        [        5      U[        R                  [        R                   S	S
SSS9	n["           [$        R	                  U S/ S.5      nSUS'   S US'   UR&                  US'   S S S 5        UR(                  (       a*  UR(                   H  n[        X5         [+        USS	S9  M     UR/                  5       n	U	S:X  a  SOSn
[        U SU	 35         [+        SU  SU	 35        ["           [$        R	                  U S/ 05      nXS'   XS'   X7S'   S S S 5        U
S:X  a  [1        USS
5        U(       a.  UR(                  (       a   UR(                  R3                  5         g g g ! , (       d  f       GN= f! [,         a     M  f = f! [,         a     Nf = f! , (       d  f       N= f! [,         a  n[        U SU 35        ["           [$        R	                  U S/ 05      nSUS'   [        U5      US'   S S S 5        O! , (       d  f       O= f[        U S5         [+        SU  S U 35         S nAGN! [,         a      S nAGNf = fS nAff = f! [,         a     g f = f! U(       a>  UR(                  (       a,   UR(                  R3                  5         f ! [,         a     f f = ff f = f)!NPYTHONUNBUFFERED1PYTHONIOENCODINGrT   CORTE_REQUEST_USERz.== Preparando ambiente e iniciando pipeline ==z$  Tr   r   )cwdenvstdoutstderrr   bufsizer]   r  r   r   r   
returncodepidr   )r<  flushr   rt  ru  z([status] Processo finalizado com codigo z[job z] finalizado com codigo rB   r   jobs_completedz[erro] rc  z&[status] Processo finalizado com erro.z] erro: )r%   environcopyrw  r   r  r   sys
executabler   r  
subprocessPopenrj   r(   PIPESTDOUTr   r1   r  r  rX  rv  waitr   close)r   r  r  r   r
  commandprocessr   raw_liner  r   r/  s               r.   
launch_jobr    s   
**//
C

:NN%s+NN%w/ $yycnn-./(:G6KL6R 1234G6""H??$$

 ))&YPR2STE'E(O"&E,";;E%L	 
 >>#NNv0($7 + \\^
 *aXv!I*VW	E&!9*FG ))&62,?E$(O",, &M	 
 [ &6: w~~$$& &7M X !   		X  
v/))&62,?E&E(O XE'N XX 	vGH	E&#/00 		
   w~~$$&  &7s  =AI9 3H5;3I9 /I:-I9 (I 9I9 ?%I($I9 L 5
I?I9 
II9 II9 
I%"I9 $I%%I9 (
I62I9 9
LL,K	L
K	L+L<L/ 
LLL/ LLLL/ 
L,+L,/M6	M$#M6$
M1.M60M11M6c                     ^  \ rS rSrS\S\SS4U 4S jjrS\S\SS4S jrSU 4S jjrS	\S
\	\
\4   SS4S jrS\\
   4S jrS\\
   4S jrS
\	\
\4   SS4S jrS
\	\
\4   S\
SS4S jrS
\	\
\4   S\
SS4S jrS
\	\
\4   S\
SS4S jrS\
SS4S jrS
\	\
\4   S\
SS4S jrS
\	\
\4   S\
SS4S jrS\
SS4S jrSU 4S jjrSS jrS
\	\
\4   SS4S jrS
\	\
\4   SS4S jrSrU =r$ )DashboardHandleri  rh  kwargsr    Nc                 D   > [         TU ]  " US[        [        5      0UD6  g )N	directory)super__init__rj   r(   )selfrh  r"  	__class__s      r.   r&  DashboardHandler.__init__  s    $B#h-B6Br0   c                     g r   r&  )r'  rh  r"  s      r.   log_messageDashboardHandler.log_message  s    r0   c                 F   > U R                  SS5        [        TU ]	  5         g )NzCache-Controlzno-store)send_headerr%  end_headers)r'  r(  s    r.   r/  DashboardHandler.end_headers  s    *5r0   r   rp  c                 0   [         R                  " USS9R                  S5      nU R                  U5        U R	                  SS5        U R	                  S[        [        U5      5      5        U R                  5         U R                  R                  U5        g )NFr   rT   r  zapplication/json; charset=utf-8Content-Length)
re   rx   rW   send_responser.  rj   r   r/  wfiler   )r'  r   rp  rI   s       r.   	send_jsonDashboardHandler.send_json  ss    zz'6==gF6")JK)3s4y>:

r0   c                     U R                   R                  SS5      nU(       aR  UR                  5       R                  S5      (       a.  UR	                  SS5      S   R                  5       n[        U5      $ g )Nr  r   zbearer r  r   )r  r   r   r   r  r   r   )r'  auth_headerr   s      r.   get_authenticated_user'DashboardHandler.get_authenticated_user  sb    ll&&;;,,.99)DD%%c1-a0668E!%((r0   c                 x    U R                  5       nU(       d"  U R                  [        R                  SS05        U$ )Nrc  zNao autenticado)r9  r5  r   UNAUTHORIZED)r'  r   s     r.   require_authDashboardHandler.require_auth%  s2    **,NN:22W>O4PQr0   c                    [        UR                  S5      =(       d    S5      R                  5       n[        UR                  S5      =(       d    S5      nU(       a  U(       d#  U R                  [        R
                  SS05        g [        X#5      (       d#  U R                  [        R                  SS05        g [        U5      nU R                  [        R                  XB[        S.5        g )Nr   r   rR   rc  Usuario e senha obrigatorioszCredenciais invalidas)r   r   
expires_in)rj   r   r   r5  r   BAD_REQUESTr   r<  r   OKr   )r'  rp  r   rR   r   s        r.   handle_loginDashboardHandler.handle_login+  s    w{{:.4"5;;=w{{:.4"5xNN:11G=[3\]!(55NN:22W>U4VWH%MMARS	
r0   	requesterc                 N   [        U5      (       d#  U R                  [        R                  SS05        g [	        UR                  S5      =(       d    S5      R                  5       n[	        UR                  S5      =(       d    S5      nU(       a  U(       d#  U R                  [        R                  SS05        g [        5       nX5;   a#  U R                  [        R                  SS05        g [        U5      XS'   [        U5        U R                  [        R                  SX2S	.5        g )
Nrc  z!Apenas admins podem criar contas.r   r   rR   r@  zUsuario ja exister  )r   created
created_by)r   r5  r   	FORBIDDENrj   r   r   rB  ro   rY   rz   rC  )r'  rp  rF  r   rR   rp   s         r.   handle_add_user DashboardHandler.handle_add_user:  s    	""NN://';^1_`w{{:.4"5;;=w{{:.4"5xNN:11G=[3\]NN:11G=P3QR'15z}}(&der0   c                    U[         :w  a#  U R                  [        R                  SS05        g [	        UR                  S5      =(       d    S5      R                  5       nU(       d#  U R                  [        R                  SS05        g U[         :X  a#  U R                  [        R                  SS05        g [        5       nX4;  a#  U R                  [        R                  SS05        g UR                  US 5        [        U5        [        5       n[        U[        5      (       a"  X5;   a  UR                  US 5        [        U5        [!        5       nX6;   a  UR#                  U5        [%        U5        ['        5         [)        [*        R-                  5       5       H2  u  pxUR                  S5      U:X  d  M  [*        R                  US 5        M4     U R                  [        R.                  S	US
.5        g )Nrc  z*Apenas o admin master pode remover contas.r   r   Usuario obrigatorioz&Nao e permitido remover o admin masterUsuario nao encontrador   r  )r   removed)r   r5  r   rJ  rj   r   r   rB  ro   	NOT_FOUNDr   rz   r   rh   rd   r   r   remover   r   r   rC   ri   rC  )	r'  rp  rF  r   rp   r   r   r   r  s	            r.   handle_delete_user#DashboardHandler.handle_delete_userK  sv   #NN://';g1hiw{{:.4"5;;=NN:11G=R3ST{"NN:11G=e3fg NN://';S1TU		(D!5!eT""x'8IIh%E"MM(# 1 1 34KExx8+t, 5 	z}}(&KLr0   c                 ^   U[         :w  a#  U R                  [        R                  SS05        g [	        UR                  S5      =(       d    S5      R                  5       nU(       d#  U R                  [        R                  SS05        g [        5       nX4;  a#  U R                  [        R                  SS05        g [        5       nX5;   a%  U R                  [        R                  SUSS	.5        g UR                  U5        [        U5        U R                  [        R                  SUS
.5        g )Nrc  z-Apenas o admin master pode promover usuarios.r   r   rN  rO  r  T)r   adminalready_admin)r   rV  )r   r5  r   rJ  rj   r   r   rB  ro   rQ  r   rC  r   r   )r'  rp  rF  r   rp   r   s         r.   handle_promote_user$DashboardHandler.handle_promote_userm  s    #NN://';j1klw{{:.4"5;;=NN:11G=R3ST NN://';S1TUNN:==TH_c*dehFz}}&IJr0   r   c                    U(       d#  U R                  [        R                  SS05        g [        U5      nU(       d#  U R                  [        R                  SS05        g U R                  [        R
                  U5        g )Nrc  zJob_id obrigatoriozJob nao encontrado)r5  r   rB  r|  rQ  rC  )r'  r   r  s      r.   handle_title_job_status(DashboardHandler.handle_title_job_status  s^    NN:11G=Q3RSV$NN://';O1PQz}}d+r0   c                 ~  ^ [        UR                  S5      =(       d    S5      R                  5       m[        UR                  S5      =(       d    S5      R                  5       nT(       d#  U R                  [        R
                  SS05        g [        U4S jS 5       5      (       d  ST;   a#  U R                  [        R
                  SS	05        g [        [        U5      5      nU(       d#  U R                  [        R
                  SS
05        g [        TU5      nU R                  [        R                  SUS.5        g )Nr(  r   r   rc  z"Identificador do corte obrigatorioc              3   ,   >#    U  H	  oT;   v   M     g 7fr   r&  )r  sepr(  s     r.   r  7DashboardHandler.handle_update_title.<locals>.<genexpr>  s     6+3h+s   )/\z..zIdentificador de corte invalidozTitulo nao pode ser vaziorb  )r   r   )rj   r   r   r5  r   rB  anyr   r   rr  ACCEPTED)r'  rp  rF  r8  sanitized_titler   r(  s         @r.   handle_update_title$DashboardHandler.handle_update_title  s    w{{:.4"5;;=G,2399;	NN:11G=a3bc6+666$(:JNN:11G=^3_`/0CI0NONN:11G=X3YZ"8_=z**x6,RSr0   c                 n   U[         :w  a#  U R                  [        R                  SS05        g [	        UR                  S5      =(       d    S5      R                  5       nU(       d#  U R                  [        R                  SS05        g U[         :X  a#  U R                  [        R                  SS05        g [        5       nX4;  a%  U R                  [        R                  SUSS	.5        g U Vs/ s H  oUU:w  d  M
  UPM     nn[        U5        U R                  [        R                  SUS
.5        g s  snf )Nrc  z8Apenas o admin master pode remover privilegios de admin.r   r   rN  z&Nao e permitido alterar o admin masterr  T)r   rV  already_demoted)r   demoted)r   r5  r   rJ  rj   r   r   rB  r   rC  r   )r'  rp  rF  r   r   us         r.   handle_demote_user#DashboardHandler.handle_demote_user  s    #NN://';u1vww{{:.4"5;;=NN:11G=R3ST{"NN:11G=e3fg!NN:==THae*fg#5VH}!V5Fz}}(&KL 6s   .	D2;D2c                    [        U5      (       d#  U R                  [        R                  SS05        g [	        5       n[        5       n[        [        5       5      n/ n[        UR                  5       5       HD  nUU[        :H  =(       d    Xd;   U[        :H  UR                  U0 5      S.nUR                  U5        MF     U R                  [        R                  SU05        g )Nrc  z$Apenas admins podem listar usuarios.)r   r   	is_masterr   rp   )r   r5  r   rJ  ro   r   r   r   r   keysr   r   r   rC  )r'  rF  rp   r   r   rp  r   r   s           r.   handle_list_users"DashboardHandler.handle_list_users  s    	""NN://';a1bc![]#uzz|,H$$3Ix7I%48R0	E NN5! - 	z}}w&89r0   c                   > U R                   R                  SS5      S   nUR                  S5      =(       d    SnUR                  S5      (       a  SnUR                  S5      (       a  Sn1 SknX#;   a  U R	                  5       (       d  g US:X  ah  U R	                  5       nU(       d  g [        5       nU R                  [        R                  UUR                  U0 5      [        U5      U[        :H  S.5        g US:X  a*  U R	                  5       nU(       d  g U R                  U5        g US	:X  aX  [           [        R                  5        VVs0 s H  u  pgXg_M	     nnnS S S 5        U R                  [        R                  W5        g UR                  S
5      (       a'  UR!                  SS5      S   nU R#                  U5        g US;   a-  [%        5       n	U R                  [        R                  SU	05        g US:X  a-  ['        5       n	U R                  [        R                  SU	05        g  [(        T
U ]U  5         g s  snnf ! , (       d  f       N= f! [,        [.        [0        4 a     g f = f)N?r   r   ra  /auth/users/auth/me>   /jobsrv  ru  /cortes-listing/api/input-files/api/cortes-listing)r   r   r   ro  rw  z/cuts/title-job-status/r  )rz  rx  r   ry  r   )r   r  r   r   r=  r   r5  r   rC  r   r   r   rq  r   r1   ri   rsplitr[  r$  r  r%  do_GETBrokenPipeErrorConnectionResetErrorConnectionAbortedError)r'  r5  	path_onlyprotected_getsr   r   r   r  rp  r   r(  s             r.   r|  DashboardHandler.do_GET  s   99??3*1-OOC(/C	}--%Iz**"I{&t/@/@/B/B
"$$&D#%ENN $"YYtR0 (!%!4	 %$$&D""4(<F<L<L<NO<NLF6<<NO NN:=='2 9::%%c1-b1F((0BB/1GNN:==9g*>?**&(GNN:==7G*<=	GN' P *  !57MN 		s0   4H?H9H?*I 9H??
II('I(c                 p   U R                   R                  S5      n[        U R                  R	                  SS5      =(       d    S5      nU(       a  U R
                  R                  U5      OSn [        R                  " UR                  S5      =(       d    S5      n[        U[        5      (       d  [        S5      e US
:X  a  U R#                  U5        g US:X  a*  U R%                  5       nU(       d  g U R'                  XF5        g US:X  a*  U R%                  5       nU(       d  g U R)                  XF5        g US:X  a*  U R%                  5       nU(       d  g U R+                  XF5        g US:X  a*  U R%                  5       nU(       d  g U R-                  XF5        g US:X  a*  U R%                  5       nU(       d  g U R/                  XF5        g US:X  a_  U R%                  5       nU(       d  g [1        5       nU R                  [        R2                  XgR	                  U0 5      [5        U5      S.5        g U R%                  5       nU(       d  g US:X  a  U R7                  U5        g US:X  a  U R9                  U5        g US:X  Ga  UR	                  S5      n[        U[:        5      (       a  U(       d#  U R                  [        R                  S	S05        g / n	/ n
/ n[<        R?                  5       n[A        5       nU H  n[        U[         5      (       d  M  [C        URE                  5       5      RF                  nU(       a  X;   a  MK  URI                  U5        [<        U-  R?                  5       n URK                  U5        URO                  5       (       d  U
RM                  U5        M  URQ                  5       (       d  URM                  USS.5        M   URS                  5         U	RM                  U5        M     U R                  [        R2                  XUS.5        g US;  a#  U R                  [        RV                  S	S05        g [!        [X        RZ                  " 5       5      n[]        U5      n0 nUR	                  S5      n[        U[        5      (       af  SSS S!S"S#.nUR_                  5        HJ  u  nnUR	                  U5      n[        U[         5      (       d  M.  URE                  5       (       d  ME  UUU'   ML     [`        Rb                  " [d        UUUU4S$S%9n[f           S&/ S US'.[h        U'   S S S 5        [k        US(5        URm                  5          U R                  [        Rn                  US)S*.5        g ! [         a5  nU R                  [        R                  S	[!        U5      05         S nAg S nAff = f! [         a    URM                  USS.5         GM  f = f! [T         a)  nURM                  U[!        U5      S.5         S nAGM  S nAff = f! , (       d  f       N= f! [p        [r        [t        4 a     g f = f)+Nra  r2  0r   s   {}rT   r   zJSON deve ser um objetorc  z/auth/loginz/auth/add-userz/auth/delete-userz/auth/promote-userz/auth/demote-userz/cuts/update-titlerv  )r   r   r   z/post/socialz/post/portalz/delete-cutr   zLista de arquivos obrigatoriazarquivo fora da pasta cortes)filerc  zalvo nao eh um arquivo)deletedmissingr  )z/triggerz/cortesz/runzEndpoint desconhecidopromptsPROMPT_HIGHLIGHT_SELECTIONPROMPT_TRANSCRIPT_CLEANUPPROMPT_SOCIAL_CAPTIONPROMPT_TITLE_GENERATIONPROMPT_PORTAL_ARTICLE)highlight_selectiontranscript_cleanupsocial_captiontitle_generationportal_articleTrf  r   )r   rB   r  r   z'Job enfileirado. Preparando pipeline...rb  )r   r   );r   r   rJ  r  r   rfiler  re   rf   r  rh   rd   r~  r5  r   rB  rj   rD  r=  rK  rS  rX  rl  rf  r   rC  r   handle_post_socialhandle_post_portalr   r   r*  r   r   r   r   addr  r   r)   r   r  rc   rQ  rj  rk  r   ri   rm  rn  r  r   r1   r   r;  rd  r}  r~  r  )r'  r  lengthraw_bodyrp  r/  r   r   files_valuer  r  r  r  seenr.  r  rg  r   r  r  prompts_payloadmappingr   env_keyvaluerq  s                             r.   do_POSTDashboardHandler.do_POST  sJ   II$$S)	T\\%%&6<AB.44::??6*%	jj!9!ATBGgt,, !:;; - %g&(($$&D  /++$$&D##G2,,$$&D$$W3++$$&D##G2,,$$&D$$W3
"$$&D#%ENN!IIdB,?XVZ^\   "&##G,&##G,%!++g.Kk400z55A`7ab!#G!#G+-F$,,.K5D"!#s++syy{+00'/!$w.779&&{3 }}NN7+~~''MM7=U"VWHMMONN7++ #0 NN:==g]c*de;;NN://';R1STTZZ\"!'*%'
!++i0ot,,'C&A"9$="9G !(W'++C0eS))ekkmm*/Jw' !0
 !!(J5

 ,5rQU_c!dJv vHI	NN:..6X0VWQ  	NN:11GSX3FG	l " MM7=["\]  HMM7SX"FGGH@ X  !57MN 		sa   /AU. $V0	!WX
#X .
V-8+V((V-0WW
X	 XX	
XX54X5c           	         UR                  S5      nU(       d#  U R                  [        R                  SS05        g [	        UR                  S5      =(       d    S5      R                  5       nU(       d#  U R                  [        R                  SS05        g  [        U5      n[	        UR                  S5      =(       d    S5      R                  5       nUR                  S5      n[        U[        5      (       a  U(       d  S	/nU Vs/ s H.  n[	        U=(       d    S5      R                  5       =(       d    S	PM0     n	nU(       a3  [        R                  " UR                  S
5      5      R                  5       OSn
UR                   SU
 3n[        R                  " 5       n[            ["        R%                  5        VVs/ s H  u  pX-
  [&        :  d  M  UPM     nnnU H  n["        R)                  US 5        M     ["        R                  U5      nU(       a\  UU-
  [&        :  aO  [+        S[-        [&        UU-
  -
  5      5      nU R                  [        R.                  SSU S305         S S S 5        g U["        U'   S S S 5        / n0 n0 nU	 H~  nUR1                  5       nUS	:X  a$   [3        XF5      nUR5                  S	5        UUS	'   M=  US:X  a-   [7        XF5      nUR5                  S5        [	        U5      US'   Mp  SUU=(       d    S'   M     [	        UR                  S5      =(       d    S5      R                  5       =(       d    S nS nSU0nS	U	 Vs/ s H  nUR1                  5       PM     sn;   nU(       a   [9        UU5      nU(       a  SUS'   UR                  US'   U(       ah   [;        U5      n[=        US   US   5      nUR                  S5      UR                  S5      UR                  S5      S.nUR5                  S5        UUS'   O*UR?                  SS5        UR?                  SS5        OS US!'   [@        RB                  " [D        RF                  5      RI                  S"S#9nUUR                  US S$ U	UUUUS%.n [K        U 5        S	U;   d  U(       d%  [            ["        R)                  US 5        S S S 5        [        RL                  n!U(       a  U(       a  [        RN                  n!OU(       a  U(       d  [        R                  n!UUR                  UU	UUUR                  S5      US&.nU R                  U!U5        g ! [         a5  nU R                  [        R                  S[	        U5      05         S nAg S nAff = fs  snf s  snnf ! , (       d  f       GN= f! [         a  n[	        U5      US	'    S nAGM6  S nAff = f! [         a  n[	        U5      US'    S nAGM]  S nAff = fs  snf ! [         a!  nSU 3US'   [	        U5      US'    S nAGN{S nAff = f! [         a'  n[	        U5      US'   [	        U5      US'    S nAGNS nAff = f! , (       d  f       GN= f)'Nconfirmrc  z(Confirmacao obrigatoria antes de postar.videor   zArquivo do video obrigatorior  	platforms	instagramrT   |r   z)Video ja publicado recentemente. Aguarde zs antes de tentar novamente.tiktokzPlataforma nao suportada
plataformaportal_filer  Tresolvedr   zFalha ao localizar materia: portalr   r  idr   linkr  r   r  z2Arquivo de materia nao encontrado para este corte.ignored_for_platformsskippedsecondstimespec   )	timestampr  caption_previewr  successr  	responsesportal_debug)r  r  r  r  r  r  r  r  )(r   r5  r   rB  rj   r   r  rv  rh   r   rU   rV   rW   rX   r   r   _RECENT_POST_LOCKr   ri   r   r   maxrJ  TOO_MANY_REQUESTSr   r  r   r  r  r  r  r   r   r   r   r  r  r   rC  MULTI_STATUS)"r'  rp  confirmed_flagr  r  r/  r  platforms_valuer  r  caption_hash	dedup_keyr   r   tsr   last_tswait_seconds	successesr  r  platformrz  portal_hintportal_pathr  pshould_post_portalarticleportal_responseportal_summaryr  	log_entryr   s"                                     r.   r  #DashboardHandler.handle_post_social  s    Y/NN:11G=g3hiW-34::<
NN:11G=[3\]	+J7J
 gkk),2399;!++k2/400*mOHWXS_**,;;	XNUw~~gnnW&=>HHJ[]!'q7	iik*7*=*=*?d*?ws38NcCcs*?Gd!!#t, #''	2G3=+@@"1c*?3=*Q&RS00 I,Wstu   (+M)$   "	!#$&	!H.."Ck!3.zCF$$[1-3Ik* 0+J@F$$X.*-f+Ih' /Is*l+# "& '++m4:;AACKt&*(.'<(	,J	1QWWY	,JJ10[I/3L,+6+;+;L( 51+>G&9'':JGTZO&\O-11$7"1"5"5h"? / 3 3F ;&N
 $$X.*8Ih'
 !!(,`a''1ef&=L#LL.88)8L	"__&t}" "(	
	 		"& 	"!!)T2 # i,,FI++F #__" mmH-(	
 	vw'i  	NN:11GSX3FG	 Y e 2 ! 3*-c(F;''3 ! 0'*3xF8$$0 -K  1%A##Gx (+CW%1 ! 5'*3xF8$,/HL)5. #"s   U 5V'V?VVBV5	V(!V%*WW3<'W8 +A&X& #Y
V+V  VV
V"%
W	/WW	
W0W++W08
X#XX#&
Y0YY
Y)c                    [        UR                  S5      =(       d    S5      R                  5       nU(       d#  U R                  [        R
                  SS05        g  [        U5      n[        UR                  S5      =(       d    S5      R                  5       n[        UR                  S5      =(       d    S5      R                  5       n [        U5      nU=(       d    US   nU=(       d    US   n	U	R                  5       (       d#  U R                  [        R
                  SS05        g [        R                  " [        R                  5      R                  S	S
9n
U
SUR                  U[!        U	5      S.n [#        X5      nUR                  S5      UR                  S5      UR                  S5      S.US'   SUS'   [%        U5        U R                  [        R&                  U
UR                  US   S.5        g ! [         a5  nU R                  [        R
                  S[        U5      05         S nAg S nAff = f! [         a/  nU R                  [        R                  SSU 305         S nAg S nAff = f! [         aS  nSUS'   [        U5      US'   [%        U5        U R                  [        R(                  S[        U5      05         S nAg S nAff = f)Nr  r   rc  zArquivo de materia obrigatorior   r  zFalha ao ler materia: zConteudo da materia vazior  r  portal_only)r  moder  r   
body_charsr  r   r  r  r  r  )r  r  r  )rj   r   r   r5  r   rB  r  rv  r  INTERNAL_SERVER_ERRORr   r   r   r  r  r   r   r  r   rC  BAD_GATEWAY)r'  rp  portal_namer  r/  explicit_titleexplicit_bodyr  ry  
final_bodyr  r  r  s                r.   r  #DashboardHandler.handle_post_portal  st   '++m4:;AACNN:11G=]3^_	,[9K
 W[[17R8>>@GKK/526<<>	)+6G
 %8(8"5gfo
!!NN:11G=X3YZLL.88)8L	"!&++ j/
		H1+JO%))$/)--h7'++F3%Ij!
 #,IhI&NN!*#.#3#3'
3G  	NN:11GSX3FG	  	NN:;;gI_`c_dGe=fg	F  	H")Ih!$SIgI&NN:11GSX3FGG		HsJ   G: H< 7BI8 :
H9+H44H9<
I5%I00I58
KA	KKr&  r    N)__name__
__module____qualname____firstlineno__r   r&  r+  r/  rJ  r   rj   r5  r
   r9  r=  rD  rK  rS  rX  r[  rf  rl  rq  r|  r  r  r  __static_attributes____classcell__)r(  s   @r.   r!  r!    s   Cc CS CT C    d38n   hsm 
DcN 
t 
ftCH~ f# f$ f" M$sCx.  MS  MT  MDK4S> Kc Kd K(,c ,d ,T4S> Tc Td T M$sCx. MS MT M&:3 :4 :$;|Rh($sCx. (T (B6H$sCx. 6HT 6H 6Hr0   r!  c                  @   [         R                  " S5      =(       d    [         R                  " S5      =(       d    Sn [         R                  " S5      =(       d    [         R                  " S5      n U(       a  [        U5      O[        nX4n[        U[        5       nU S;  a  U OSn[        SU S	U S
35        [        S5         UR                  5         S S S 5        g ! [         a	    [        n Ngf = f! [         a    [        S5         N6f = f! , (       d  f       g = f)NDASHBOARD_HOSTHOST0.0.0.0DASHBOARD_PORTPORT>   ::r  	localhostzDashboard server em http://r  z/dashboard.htmlzPressione Ctrl+C para encerrar.z
Encerrando servidor...)
r%   r&   rJ  DEFAULT_ENDPOINT_PORTr~  r   r!  rX  serve_foreverKeyboardInterrupt)hostport_rawportaddressserverdisplay_hosts         r.   mainr  L  s    99%&H"))F*;HyDyy)*?bii.?H% (s8}.C lG	W&6	76#+<<t++L>4&PQ/0	.  " 
8	7  %$% ! 	.,-	. 
8	7s<   1C (DC4C10C14D	DDD
D__main__r  )r   )Fr   )re   r%   r   r  r  rm  r   rj  httpr   http.serverr   r   pathlibr   typingr   r   r	   r
   r   r  rU   r  r   urllib.errorr  urllib.requestr   r   r  r   r   r   r   r   r   r   r   r  r  r   BaseException__annotations__selenium.common.exceptionsr   ImportErrorpydanticr   r  r  r  r   Lockr  r   rj   r  r   rI  r&   r   r~  __file__r*  parentr(   r   r  r/   r"   r  r1   r   r   r   r8   r9   r:   r;   r=   r>   r?   r@   r   r   r   r_   r~   r   r   rC   r   rD   rE   rJ  r^   rF   rG   r}   rL   r   r!  rN   rO   r   rP   r   rQ   rl  rY   ro   rz   r   r   r   r   rW  r   r   r   r   r   r   r   r   r   r   r   r   r  r  r$  r'  r0  r7  rN  r`  rr  ro  r|  r  r  r  r  r  r  r  r  r  r  r  r   r  r!  r  r&  r0   r.   <module>r     s[    	 	 
      E  3 3       '	 	 	    04 h}- 4*I#C # 37 -0 7") 5=t4D c8C=01 DNN$ "$tCJ $"!")),CU"KL >!!#** 
!$<< 	*D 	*  	 (*
Dd38n$% *>>  E ))-/OP))-|<YY35MN YY3Z@ +-XY))-/?@))-/NO		/73f// <'M)  )+T#tCH~%& +..!d38n !"hsm "nntCy #x} #~~)-DS QtCH~ Q^^% bii(:EBC %' 4S> &#' 8C= '>># 13 DeCHo-. 3#..* )+T#tCH~%& +>># @C @C @"DcN "8 d38n    #T#Y #8	!S	 	!d 	!%s %t %- - - -%# # 
!# 
!(3- 
!    'c3h '8%4S> %d %# C  T 
*3 
* 
* 
*"4S> "d " 49 +D +D +S +,# # 4Qd3S$sCx.-@(A#AB Qh$tCH~. :T d3S$sTWx.EX@Y;Y6Z 8's uT4S>5I/J eS#X e4 e")T#s(^ ) )HZ )X+C +C +C +\   $3 # # $ 4*# *(4S>": *  " ,    6St Sc Sc S>V$ V V VD3 hsm xPT~ &	*d 	*tCH~ 	*> > > Cs C# C$sCx. CBDcN tCy 4As Ad3i AT#s(^ ASV A[_ AH~H/ ~HB.$ zF m1  *%)"*
  #"#  "!"x  sH   U& U5 "V "V &U21U25V VVVVV