
    aj                        d dl mZ d dlmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZ ed          ZdZdZedz  Zedz  Zd	Zd
Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Ze dk    r e             dS dS )    )Path)ZoneInfoNzQ/data/video-pipeline/HaTramAudio/project/031-Buoi-Dien-Cuoi-Truoc-Ngay-Tot-Nghiepzrun-20260723T010035Z-09393c41@8316d0fc4fc1f28785ce23216e9254e5eb561e4e56847ff464f71fdba8bac4f7zoutput/final-upload.mp4zimage/normalized/intro.png@f52886b9a457126f9b3c7acc367edbbdca9eefb43b2e2c1a4c470934388a9b48@39e9dd752157df84db1c0f18cd907ef01f796653518182b1204acec71136668cc                      t           j                            t           j        j                                                                      dd          S )N+00:00Z)dtdatetimenowtimezoneutc	isoformatreplace     work/publish/publish_postiz.pyr   r      s5    11;;==EEhsSS
Sr   c                 &   t          j                    }t          | d          5 }|                    d          x}r,|                    |           |                    d          x},d d d            n# 1 swxY w Y   |                                S )Nrbi   )hashlibsha256openreadupdate	hexdigest)phfbs       r   shar!      s    
>
1Tll +a66+*qxx{{{166+*+ + + + + + + + + + + + + + +	s   AA44A8;A8c                     | j                             dd           |                     | j        dz             }|                    t          j        |dd          dz              |                    |            d S )NT)parentsexist_okz.tmpF   )ensure_asciiindent
)parentmkdirwith_suffixsuffix
write_textjsondumpsr   )r   ots      r   atomicr2      s    d+++ammAHVO.L.LAQ\\Z^Zdefty  BC  [D  [D  [D  EI  [I  NJ  NJ  NJ  KL  KT  KT  UV  KW  KW  KW  KW  KWr   c                     t           j                                        t          j                    dz  } |                                 r/t          j        |                                 j                  dk    sJ | 	                                
                                D ]}d|v r|                                                    d          sy|                    dd          \  }}                    |                                |                                                    d                              d                     g d}t!          fd	|D                       sJ S )
Nz .config/ha-tram-audio/postiz.envi  =#   "')POSTIZ_BASE_URLPOSTIZ_API_KEYPOSTIZ_FACEBOOK_INTEGRATION_IDPOSTIZ_YOUTUBE_INTEGRATION_IDPOSTIZ_TIMEZONEPOSTIZ_SLOTSc              3   B   K   | ]}                     |          V  d S Nget).0kes     r   	<genexpr>zenv.<locals>.<genexpr>   sp        Xp  Xp  fg  YZ  Y^  Y^  _`  Ya  Ya  Xp  Xp  Xp  Xp  Xp  Xpr   )osenvironcopyr   homeexistsstatS_IMODEst_mode	read_text
splitlineslstrip
startswithsplit
setdefaultstripall)r   linerD   vkeysrE   s        @r   envrZ      s   :??ty{{#EEQQXXZZ  GB\`\hijioioiqiqiy\z\z  }B  ]B  ]B  ]B  ]B[[]]%%'' Q QTD[[11#66[zz#a31Qaggii		0D0D0J0J30O0OPPP M  M  M  UX  Xp  Xp  Xp  Xp  ko  Xp  Xp  Xp  Up  Up  Np  Np  Np  xy  qyr   c           	      F   | d                              d          |z   }d| d         i}|+d|d<   t          j        |                                          }t	          d          D ]}	 t
          j                            t
          j                            ||||          d	
          5 }t          j	        |
                                pd          cd d d            c S # 1 swxY w Y   # t          $ r' |dk    s|dk    r t          j        d|z             Y w xY wd S )Nr9   /Authorizationr:   zapplication/jsonzContent-Type   )dataheadersmethod<   )timeouts   {}GETr%   )rstripr.   r/   encoderangeurllibrequesturlopenRequestloadsr   	Exceptiontimesleep)rE   ra   pathr_   ur`   nrs           r   reqrt      s   s##D(/!DTBU1V-?W^,TZPTEUEUE\E\E^E^
((  Qv~55aT'Y_5``ikll  Wpqy}  zD  EF  EK  EK  EM  EM  EV  QV  zW  zW  W  W  W  W  W  W  W  W  W  W  W  W  W  W  W  W  W  W  W	   emmq!ttE:ad s7   (AC-*(C!C-!C%	%C-(C%	)C--.DDc                 H   t           d| dz  }|                                r_t          j        |                                          }|d         |k    r#|d         |                                j        k    sJ |d         S t          |                              dd          }d| d	         	                    d
           d| d          d| d}t          j        g d|dd          }|j        dk    rt          d|j        dd          z             t          j        |j                  }	|	                    d|	          }
t#          |
t$                    r|
d         n|
}
t#          |
t&                    r*|
                    d          r|
                    d          sJ t)          |dt           j        t,          ddt.          t          |          ||                                j        |
d         |
d         ddt1                      d           |
d         |
d         dS )Nzlog/postiz-upload-z.jsonlocal_sha256local_size_bytesmediar7   z\"zurl = "r9   r\   z"/upload"
header = "Authorization: r:   z"
form = "file=@z#"
fail-with-body
silent
show-error
)curlz--config-T)inputtextcapture_outputr   zupload failed: ir_   idrp   r6   	completed)r~   rp   
[REDACTED])schema_version
project_idrun_idstatusverifiedsource_canon_sha256
local_pathrv   rw   rx   
credential
created_at)ROOTrK   r.   rl   rO   rL   st_sizestrr   re   
subprocessrun
returncodeRuntimeErrorstderrstdoutrB   
isinstancelistdictr2   nameRUNCANONr   )rE   rp   keyexpectedrprs   	safe_pathcfgcprawms              r   uploadr      s   	(c	(	(	((IIKK CJr||~~!a&7&A&AaHZF[]a]f]f]h]h]pFpFpFpFpxy  {B  yC  rCt99S''J#$++C00 J J"#$4"5J J J J J N***$dSSSM1<(9")DEE:J(JKKK	Z	SWWVC001:a;M;M3T1Q44ST\fghim\n\n  VQstsxsxy}s~s~  VQ  DE  DI  DI  JP  DQ  DQ  VQ  VQ  VQQDIsKcg  D  RU  VZ  R[  R[  ks  GK  GP  GP  GR  GR  GZ  ij  ko  ip  xy  z@  xA  cB  cB  P\  jm  jo  jo  p  p  q  q  q  @  AE  F  NO  PV  NW  yX  yX  rXr   c                     t          | t                    r*|                     d|                     dg                     n| S )Npostsr_   )r   r   rB   )r   s    r   r   r   )   s8    ZD=Q=QZcgggcggfR&8&8999WZZr   c                 V    |                      d          p|                      d          S )NpublishDatedaterA   )xs    r   stampr   *   s"    AEE-((9AEE&MM9r   c                 6   t          | d                   }t          j                            |          }|                    t          j        j                  t          j        d          z
  }|t          j        d          z   }t          | ddt          j
                            |                                                    dd          |                                                    dd          d	          z             }t          |          }d
 ||fD             d}	|D ]}
|
                    d          pi                     d          }t!          |
          }|
                    d          }|v r|r|dv rt          j                            d|v sd|v r|                    dd          n|dz             }|                             |                    t          j        j                                      d                     |vr|	dz  }	g }| d                             dd                                          D ]K}t)          t*          |                    d                    \  }}|                    ||f           E#  Y IxY w|sJ t/          d          D ]}|                                t          j        |          z   }t3          |          D ]\  }}t          j                            |t          j        ||          |          }||k    rA|                    t          j        j                                      d          t9          fd||fD                       r	||	fc c S t;          d          )Nr=   r6   )days-   rd   /posts?r	   r
   	startDateendDatec                 ,    i | ]}|t                      S r   )set)rC   is     r   
<dictcomp>zchoose.<locals>.<dictcomp>,   sO      Ke  Ke  Ke  XY  LM  NQ  NS  NS  Ke  Ke  Ker   r   integrationr~   state)QUEUE	PUBLISHED+microsecondr>   , :)tzinfoc              3   ,   K   | ]}|         vV  d S r@   r   )rC   r   occupiedr   s     r   rF   zchoose.<locals>.<genexpr>=   s,      	2	2Q#Xa[
 	2	2	2	2	2	2r   zno slot)r   r   r   r   
astimezoner   r   	timedeltart   rh   parse	urlencoder   r   r   rB   r   fromisoformataddrS   mapintappendrg   r   sortedcombinern   rV   r   )rE   fbyttzlocalstartendr   psotherr   iidsr   dslotstokenr   r   dayr   candr   r   s                         @@r   chooser   +   s   Q !"")<)<55CSCSTVT_TcCdCdegeqwxeyeyeyCyU  D  EG  EQ  WY  EZ  EZ  EZ  Zz}  _b  cd  ej  kt  u{  uA  uK  uK  Y^  Yh  Yh  Yj  Yj  Yr  Yr  s{  |  Y@  Y@  KN  KX  KX  KZ  KZ  Kb  Kb  ck  lo  Kp  Kp  Lq  Lq  ur  ur  kr  _s  _s  [^  w|  }@  wA  wA  tv  Ke  Ke  ^`  ac  ]d  Ke  Ke  Ke  BJ  lm  fk
 $ $Quu]!r&&t,,#uQxxQaeeGnnH___u(===[3!88saxxqyyX666VWX`V`aa1bjknbobsbstu  uA  uA  BD  BM  BQ  uR  uR  uZ  uZ  gh  uZ  ui  ui  cj  cj  cj  cj
(5!85	''C006688  U
c%++c""
#
#caELL!A$7$7$7$7"II I ISzz||BLc****$E]] I Ica
D1R884
Ekk(r{''//A/>>3		2	2	2	2	22b'	2	2	222H#d5.3H3H3H3H3HH	I
 Is   AJJc                     t                      } t          t                    t          k    r?t                                          j        dk     rt          t                    t          k    sJ t          j	        t          dz                                            }|d         r|d         t          k    sJ t          | dd          d         du sJ t          | dd	          }t          |t                    r*|                    d
|                    d|                    n|}| d         }| d         }|df|dffD ]\  }fd|D             }t#          |          dk    r[|d                             d          |k    r<|d                             d          dk    r|d                             d          dusJ t          | ddz              t%          | ||          \  }}t'          | t          dt                    }	t'          | t          dt                    }
t%          | ||          \  }}t          dz                                  }|                                d                                         }dt#          |          cxk    rdk    sn J d                                                    dd          d g d!|i||	gd"gd#did$d!|i||	gd"gd|d%d&|
g d'd$gd(}t#          |d)                   dk    r#t#          d* |d)         D                       dk    sJ t          d+z  }|                                rJ t3          j        t          j        |dd,-                                                                                    }t3          j        t          j        t          z   t>          z   t          z   t          z   |z   |z                                                                             }tA          |dt          j        t>          d.||d/         |t          t          |	d!         |
d!         gtC                      d0           t          | d1d2|          }tE          j#        d           tI          j%        d3          z
                                                      dd          }tI          j%        d3          z                                                       dd          }tM          t          | dd4tN          j(        )                    ||d5          z                       }i }||fD ]^fd6|D             }t#          |          dk    sJ t#          |          f            |d                             d!          d7d8|<   _i d9dd:t          j        d;t>          d<d=ddd>dd?d dt          d@|d/         dA|                                dB||dCd)|dD|	dE|
dFt          dGt          dH||dItC                      dJ}tA          t          dKz  |           tU          t          j        d=|+                    dL          |d/         ||dMd N                     d S )ONi ʚ;zscript/publish-ready.jsonr   r   rd   z/is-connected	connectedTz/integrationsintegrationsr_   r;   r<   facebookyoutubec                 F    g | ]}|                     d           k    |S )r~   rA   )rC   r   r   s     r   
<listcomp>zmain.<locals>.<listcomp>C   s-    ---qAEE$KK,,,,,r   r6   r   
identifierr   u   Hạ Trâm Audiodisabledz/find-slot/video	thumbnailzoutput/info.txtr%   d   scheduler	   r
   Fr~   )contentimage__type)r   valuesettingspublicno)r   titletypeselfDeclaredMadeForKidsr   tags)r   r   	shortLinkr   r   r   c                 *    h | ]}|d          d         S )r   r~   r   )rC   r   s     r   	<setcomp>zmain.<locals>.<setcomp>F   sV      ~p  ~p  ~p  Z[  @  AN  O  PT  U  ~p  ~p  ~pr   zlog/postiz-schedule-intent.json)r   r   )	sort_keys
separatorscreatingr   )r   r   r   r   idempotency_keyslot_utcpayload_sha256video_sha256thumbnail_sha256remote_media_idsr   POSTz/posts)minutesr   r   c                 "   g | ]
}|                     d           pi                      d          k    1|                     d          dk    Jt          |          Yt          j                            dt          |          v sdt          |          v r#t          |                              dd          nt          |          dz                                 t          j        j                                      d          k    |S )	r   r~   r   r   r
   r   r	   r   r   )	rB   r   r   r   r   r   r   r   r   )rC   r   r   slots     r   r   zmain.<locals>.<listcomp>J   s     c  c  c1m,,277==sBBquuW~~W^G^G^chijckckG^prp{  qJ  qJ  nq  uz  {|  u}  u}  n}  n}  AD  HM  NO  HP  HP  AP  AP  KP  QR  KS  KS  K[  K[  \_  `h  Ki  Ki  Ki  W\  ]^  W_  W_  `h  Wh  qi  qi  qt  qt  uw  u@  uD  qE  qE  qM  qM  Z[  qM  q\  q\  ^b  qb  qbQ  qb  qb  qbr   r   )post_idr   r   r   r   r   scheduled_verified	scheduled	publishedr   
slot_localintegration_ids)r   r   video_mediathumbnail_mediar   r   other_integration_posts_ignoredr   )create_responser   verified_atzlog/postiz-schedule.jsonz%H:%M %d/%m/%Y)r   r  r   r   other_ignored)r&   ),rZ   r!   VIDEOVHrL   r   THUMBTHr.   rl   r   rO   r   rt   r   r   rB   lenr   r   rP   rU   r   r   rK   r   r   r/   rf   r   r   r   r2   r   rn   ro   r   r   r   rh   r   r   printstrftime)rE   readyintsr   r   identfoundr   r   r   thumbinfor   payloadintentpphidemresponsewindow_start
window_endcalqrecr   r  s                          @@r   mainr'  ?   sd   55E

B5::<<#7#E#E#e**VX...._c_iko  qL  lL  kW  kW  kY  kY  `Z  `ZY^  bg  hr  bs  [[  x}  ~S  xT  V[  x[  x[  x[  x[AeO$$[1T9999s1U??[?[$  T^  _c  dh  Ti  Ti  bsaeaiaijxy}  zB  zB  CI  JN  zO  zO  bP  bP  bP  os\`  wx  yY  wZ  tv  ^_  `  ^@  []z?By>2 ^ ^YS----D---%SZZ]]uQx||T`GaGachGhGhmrstmumymy  {A  nB  nB  DV  nV  nV  [`  ab  [c  [g  [g  hr  [s  [s  {  [  [  [  [  @C  DE  FK  LY  Z]  L]  @^  @^  @^  @^2b//eEqwr(B(B%PQRWXcdfIgIg5y  AB  CE  FH  zI  zIhxhlmrsx((**1B1B11E1K1K1M1M5UVX[\aXbXbUgUgUgUgdgUgUgUgUgUgUg4>>#3#3#;#;HS#I#IV[ce  @D  EG  H  ]a  kp  jq  Rr  Rr  Qs  @H  IS  T  pU  pU  fj  km  en  CG  QV  PW  xX  xX  wY  ox  AF  NV  qu  BG  OQ  eR  eR  VS  VS  oT  
U  
U  ]`  ah  ip  aq  ]r  ]r  tu  ]u  ]u  z}  ~p  ~p  _f  gn  _o  ~p  ~p  ~p  zq  zq  st  zt  zt  zt  zt	/	/7>>;K;K0K0K0Kw~^b^hip{  LU  _V  _V  _V  _]  _]  __  __  P`  P`  Pj  Pj  Pl  PlB  ry  r@  BF  BK  LQ  BQ  RU  BU  VX  BX  Y[  B[  \^  B^  _a  Ba  Ai  Ai  Ak  Ak  rl  rl  rv  rv  rx  rx  mq  y  @G  Z[  im  ir  |  IS  fj  v}  ~D  vE  WY  ik  A  V[  \`  Va  bg  hl  bm  Un  |  |A  |A  HB  HB  yC  yC  yC
ax
(
(AT",_`JaJaJaEaDlDlDnDnDvDvw  AD  EE  EE|  RV  WY  Wc  lm  Wn  Wn  Wn  Rn  Qy  Qy  Q{  Q{  QC  QC  DL  MP  QQ  QQ  FP  V[  \_  `a  bg  hq  rx  r~  rH  rH  Vb  mw  Ix  Ix  ry  ry  hy  \z  \z  V{  V{  RU  BD  |AG V VS c  c  c  c  c  c  c  c!	QCA<adhhtnnW+U+Uc

 gq  gdi  g  gXFZ  g[efj  gkvw{  g  }H  IN  g  Od  ej  g  ku  v}  ~D  vE  g  FR  SX  Sb  Sb  Sd  Sd  g  ev  CE  PR  wS  wS  g  T[  \a  g  bo  pu  g  vG  HM  g  N\  ]_  g  `r  su  g  vW  X]  g  px  FR  ad  af  af  g  g  g  hn  os  tN  oN  OR  hS  hS  hS  TY  Z^  Zd  oC	  Q	V	  Q	_	  Q	_	  `	p	  Q	q	  Q	q	  }	D
  E
K
  }	L
  U
Z
  k
p
  eq
  eq
  
D  ZE  ZE  ZE  TF  TF  TF  TF  TFr   __main__r@   )!pathlibr   zoneinfor   r   r   r   r.   rG   rL   r   rn   urllib.parserh   urllib.requestr   r   r   r  r  r  r  r   r!   r2   rZ   rt   r   r   r   r   r'  __name__r   r   r   <module>r.     s               V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V V	T
]^^  dC_b  JL  DI  SW  Xq  Sq  MR  x|  }Y  xY  rw  ]_  Z\  ce  `b S S S  
W W Wy y y   X X X [ Z Z 9 9 9  (F F F Zr   