
    ^j"                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
 d dlmZ d dlmZ  ee                                          j        d         Z ej                    dz  Zedz  Z ed          Zd	d
hZdZdZd Zd ZddZd Zd Zd Zd Z d Z!ddZ"d Z#d Z$d Z%d Z&e'dk    r e( e&                      dS )    N)datetime	timedeltatimezone)Path)ZoneInfo   z!.config/huyen-an-audio/postiz.envzlog/postiz-schedule.jsonzAsia/Ho_Chi_MinhQUEUE	PUBLISHEDcmrq10vod000hj7cbt8zvuj6acmrpr0j9u000bj7cboqonlx4bc                     i } t                                                                           D ]}|                                }|r|                    d          sld|v rh|                    dd          \  }}|                                                    d                              d          | |                                <   | S )N#=r   "')CONFIG	read_text
splitlinesstrip
startswithsplit)drawskvs        script/schedule-postiz.pyenvr      s    ))++ C CSIIKK! Cq||C   CSAXXwws1~~31Q17799??3#7#7#=#=c#B#Ba		l	    c                    t          j                    }|                     d          5 t          fdd          D ]}|                    |           	 d d d            n# 1 swxY w Y   |                                S )Nrbc                  .                          d          S )Ni   )read)fs   r   <lambda>zsha.<locals>.<lambda>   s    166+.. r   r   )hashlibsha256openiterupdate	hexdigest)pathhblockr$   s      @r   shar/      s    
>
iioo D....s33CCeAHHUOOOOCD D D D D D D D D D D D D D D	s   ,A##A'*A'c           	      J   |(t          j        |d                                          nd }t          j                            |                     d          |z   |d|i|rddini |          }	 t          j                            |d	          5 }t          j        |          cd d d            S # 1 swxY w Y   d S # t          j	        j
        $ rN}t          d
|j         d|                                                    d          d d                    |d }~ww xY w)NFensure_ascii/AuthorizationzContent-Typezapplication/json)dataheadersmethodx   )timeoutzPostiz HTTP z: replace)errorsi  )jsondumpsencodeurllibrequestRequestrstripurlopenloaderror	HTTPErrorRuntimeErrorcoder#   decode)	basekeyr7   r,   payloadbodyreqres	            r   r@   r@       s|   9@9Ldje,,,33555RV^DKK,,T1t_UX  ER  DH  ]P]kl~\\  NP  ER  Z`  a  aC~c#..G!49Q<<GGGGGGGGGGGGGGGGGG  C  C  C,7zaf7z7zPQPVPVPXPXP_P_gpP_PqPqrwswrwPx7z7z*{*{  BC  %C  Cs=   1!C  B3&C  3B77C  :B7;C   D"A	DD"c                     t          j        t          |                               dd                    }|j         |                    t
          j                  n|                    t
          j                  S )NZ+00:00tzinfo)r   fromisoformatstrr:   rU   r   utc
astimezone)valuedts     r   parser\   &   s    3u::--c(;;<<gigpgxBJJV^VbJDcDcDc  A  L  L  MU  MY  Z  Z  >Zr   c                     |                      d          pi }t          |t                    r|                     d          nd S )Nintegrationid)get
isinstancedictpostxs     r   iidrf   (   s:    88M bz!D7I7I(Sdt!Sr   c                 |    |                      d          p|                      d          }|rt          |          nd S )NpublishDatedate)r`   r\   rc   s     r   whenrj   *   s8    88M.dhhv..!6MeAhhh/Mr   c                     t          | t                    r*|                     d|                     d|                     n| S )Npostsr5   )ra   rb   r`   )rL   s    r   rowsrm   ,   s:    ZX_`dMeMerWW[[-H-HIIIkrrr   c           	      l   t           j                            |                                                    dd          |                                                    dd          d          }d |D             }t          t          | |dd|z                       D ]}t          |          }t          |	                    dd                    
                                }	t          |          }
||v r=|
r;|	t          v r2||                             |	                    d	          |	|
d
           |S )NrS   rR   )	startDateendDatec                     i | ]}|g S  rr   ).0re   s     r   
<dictcomp>zcalendar.<locals>.<dictcomp>/   s    
!
!
!A1R
!
!
!r   GETz/posts?state r_   )r_   rv   ri   )r?   r\   	urlencode	isoformatr:   rm   r@   rf   rW   r`   upperrj   OCCUPIEDappend)rJ   rK   startendtargetsqfilteredrd   r^   rv   stamps              r   calendarr   -   s@   	<u'8'8'@'@#'N'NY\YfYfYhYhYpYpqyz}Y~Y~  A  A
!
!
!
!
!'$s515566 L LT$ii+c$((72"6"677==??d4jjH5H+<+<Xk=R=Y=Y`d`h`him`n`nw|  EJ  [K  [K  >L  >L  >Lr      c           
      t   |                      t                    }g }g }|                    d          D ]V}t          t          |                                                    d                    \  }}|                    ||f           Wt          |          D ]}	|                                t          |	          z   }
|D ]f\  }}t          |
j        |
j        |
j        ||t                                         t          j                  }|| k    r|                    |           gt!          |          S )N,:daysrT   )rY   LOCALr   mapintr   r|   rangeri   r   r   yearmonthdayr   rX   sorted)now_utcslotsr   	now_localresultparsed_slotsitemr-   mnr   r   s               r   
candidatesr   4   s#   e$$BV[[ B BT	#djjll  %%&&#!A|':':Aa5'A'A'A'A
++ ) )Qnnya((((# ) )ca	#(39SWQq	>	>	>	I	I(,	W	W5GmmFMM%((() 	vr   c                 n    | D ]"t          fd|D                       rc S #t          d          )Nc              3   \   K   | ]&}t          fd |         D                        V  'dS )c              3   t   K   | ]2}t          |d          z
                                            dk     V  3dS )ri   r   N)abstotal_seconds)rs   re   r   s     r   	<genexpr>z#choose.<locals>.<genexpr>.<genexpr>A   sD      TTaaio4466779TTTTTTr   N)any)rs   targetr   r   s     r   r   zchoose.<locals>.<genexpr>A   sI      kkY_STTTT8FCSTTTTT	Tkkkkkkr   z"No common slot in candidate window)allrG   )candsr   r   r   s    ` @r   chooser   ?   sZ     y yUkkkkkcjkkkkkxsxlxlxlxx8999r   c           	          t          | |t          d          z
  t          d          z   |          fd|D             S )N   minutesc                 :    i | ]}|fd |         D             S )c                     g | ]Z}t          |d          z
                                            dk     0|d         |d         |d                                          d[S )ri   r   r_   rv   )r_   rv   rh   )r   r   ry   )rs   re   slots     r   
<listcomp>z*exact_found.<locals>.<dictcomp>.<listcomp>E   s      Z  Z  Z[\qtvwx~v  AE  wE  vT  vT  vV  vV  rW  rW  XY  rY  rYqwqz&	@S@S@U@UVV  rY  rY  rYr   rr   )rs   r   exactr   s     r   rt   zexact_found.<locals>.<dictcomp>E   sc      	q  	q  	q  _e  Z  Z  Z  Z`efl`m  Z  Z  Z  	q  	q  	qr   )r   r   )rJ   rK   r   r   r   s     ` @r   exact_foundr   C   sv    Si22224	!8L8L8L3LWUU 	q  	q  	q  	q  	q  ip  	q  	q  	q  qr   c                 :     t           fd|D                       S )Nc              3   z   K   | ]5}t          |                   d k    o|         d         d         dk    V  6dS )r   r   rv   r	   Nlenrs   r   founds     r   r   zboth_queued.<locals>.<genexpr>G   sL      __VCf!HeFmA&6w&?&H______r   )r   )r   r   s   ` r   both_queuedr   F   s'    ____W^______r   c                  :   ! t           dz  t           dz  t           dz  g} d | D             }|r%t          dd                    |          z             t          j        t
          j        t          t           dz            gt                     }|j        rt          d	          t                      }|d
         }|d         }|d         }|d         }|
                    dd          }||ft          t          fk    rt          d          t          j        t           dz                                            }	t          j        t           dz                                            }
t          j        t           dz                                            }|
d         }|	
                    d          dus|	
                    d          |k    rt          d          |
                    d          dusD|
                    d          |k    s+|
                    di           
                    d          durt          d          t           dz  }t           dz  }|                                r|                                r|	
                    di           
                    di           
                    d          t%          |          k    sN|	
                    di           
                    di           
                    d          t%          |          k    rt          d          t&                                          rt          j        t&                                                    }|
                    d          du rt          d           |
                    d!          d"k    rt          d#          |
                    d!          d$k    rB|
                    d          |k    r(|
                    d%          rt)          |d%                   }t+          |||||f           t-           ||f          r|                    dd& dt1          j        t4          j                                                  d'           t&                              t          j        |d(d)*          d+z              t?          t          j        dd|d,          d-d(.                     d/S tA           fd0||fD                       rt          d1          |	d         d         }|	d         d         }i }||fD ]/}tC          ||d2d3|z             }t)          |d4                   ||<   0t1          j        t4          j                  }tE          ||          }tG          |||tI          d56          z
  |d7         tI          d58          z   ||f          }tK          ||||f          }tG          |||tI          d56          z
  |d7         tI          d58          z   ||f          !tK          |!||f          }t           d9z                                  }|&                    d:d5          d5         &                    d;d5          d/         '                                }|&                    d;d5          d5         '                                }d<|                                (                    d=d>          d(g d?|i||d?         |d@         dAgdBgdCdDidEd?|i||d?         |d@         dAgdBgdF|dGdH|d?         |d@         dAg dIdEgdJ}d5d(d$|dK|)                    tT                                                    |                                dL |+                                D             d!fdM||fD             d||dNi t1          j        t4          j                                                  dO}t&                              t          j        |d(d)*          d+z              tC          ||dPdQ|           t+          |||||f           t-           ||f          }|                    ||rd&nd" t1          j        t4          j                                                  dR           t&                              t          j        |d(d)*          d+z              t?          t          j        ||d,         |d%         |dS          dTd(.                     |rd/nd5S )UNzlog/postiz-media.jsonzstory/promotion-report.jsonzlog/upload-transcode.jsonc                 T    g | ]%}|                                 t          |          &S rr   )existsrW   )rs   r,   s     r   r   zmain.<locals>.<listcomp>J   s+    	>	>	>	>#d))	>	>	>r   z9Postiz schedule blocked: missing verified prerequisites: z, zscript/assert-publish-ready.py)cwdz,Postiz schedule blocked: publish gate failedPOSTIZ_BASE_URLPOSTIZ_API_KEYPOSTIZ_FACEBOOK_INTEGRATION_IDPOSTIZ_YOUTUBE_INTEGRATION_IDPOSTIZ_SLOTSz09:20,19:00z2Target integration IDs differ from skill authorityspoken_sha256verifiedTsource_canon_sha256zMedia receipt canon mismatchserver_verificationunder_one_gbzTranscode receipt invalidzoutput/final-upload.mp4z image/intro-poster-1920x1080.pngmediavideor'   	thumbnailz9Media receipt hashes no longer match local publish assetsz:Verified schedule receipt already exists; do not duplicatestatuspartial_failurezHPartial schedule receipt requires manual review; refusing duplicate POST
submittingslot_utc	completed)r   r   rl   resumed_after_uncertain_post
checked_atF   )r2   indent

slot_local)r   resumedr   rl   r1   r   c              3   (   K   | ]}|         V  d S Nrr   r   s     r   r   zmain.<locals>.<genexpr>]   s'      	.	.F%-	.	.	.	.	.	.r   zJPartial or foreign occupancy at pending exact slot; manual review requiredru   z/find-slot/ri   r   r   r   zoutput/info.txtzTITLE
z

DESCRIPTION
schedulerS   rR   r_   r,   )r_   r,   )contentimage__typefacebook)r^   rZ   settingsyoutubepublicno)r   titletypeselfDeclaredMadeForKidsr   tags)r   ri   	shortLinkr   rl   zEGET /posts filtered by exact target integration IDs from current timec                 >    i | ]\  }}||                                 S rr   )ry   )rs   r   re   s      r   rt   zmain.<locals>.<dictcomp>f   sk      ]P  ]P  ]P  w  w}  ~  ^d  ef  ep  ep  er  er  ]P  ]P  ]Pr   c                 <    i | ]}|t          |                   S rr   r   )rs   r   	preflights     r   rt   zmain.<locals>.<dictcomp>f   se      QF  QF  QF  tz  RX  Y\  ]f  gm  ]n  Yo  Yo  QF  QF  QFr   )r   r   )versionr   r   r   selection_authorityr   r   find_slot_advisory_utcfind_slot_was_not_lower_boundoccupied_counts_filteredignored_other_integrationsr   rl   submitting_atPOSTz/posts)r   r   rl   r   r   )r   r   r   r   rl   ),PROJECT
SystemExitjoin
subprocessrunsys
executablerW   
returncoder   r`   EXPECTED_FBEXPECTED_YTrG   r<   loadsr   r   r/   OUTr\   r   r   r*   r   nowr   rX   ry   
write_textr=   printr   r@   r   r   r   r   r   r   r:   rY   r   items)"requiredmissinggaterP   rJ   rK   fbytr   r   	promotion	transcodecanonvideo_localthumb_localpreviousprevious_slotr   thumbfindr   r5   r   r   r   r   infor   descriptionrL   receiptr   r   r   s"                                   @@r   mainr  H   sT   **73P+PQXYtQt
u	>	>	>	>	>l*XY]YbYbcjYkYkklllncnS1Q)Q%R%RSX_```OT*%STTT55a!"q)9':3a@`>a2ef  hG  fHbd  OP  OT  OT  Uc  dq  Or  Or  INGk+&&&\:n-o-o'oz722==??@@4:W^_|W|  WH  WH  WJ  WJ  LK  LK  VZ  V`  bi  jE  bE  aP  aP  aR  aR  VS  VS  LU  Zc  ds  Zt  TY	IIj%%3H)I)I5)P)PWc  eC  XD  XD  RDMM*T))Y]];P-Q-QSX-X-X\e\i\ij  AC  ]D  ]D  ]H  ]H  IW  ]X  ]X  `d  ]d  ]d  kw  xS  kT  kT  eT..7Ce;e{  _K$6$6$8$8  _EIIgb<Q<Q<U<UV]^`<a<a<e<efn<o<oqt  vA  rB  rB  =B  =B  FK  FO  FO  PW  XZ  F[  F[  F_  F_  `k  ln  Fo  Fo  Fs  Fs  t|  F}  F}  B  CN  O  O  FO  FO  Vb  c^  V_  V_  P_JJLL P:cmmoo&&(\\*%%L9u,v,v&v\\(...\  CM  6N  6N  0N\\(\))hll;P.Q.QSX.X.X]e]i]ijt]u]u.Xx
+,,=;tCWYZ\V]3^3^U%B   jOOk%gk  zB  zF  GO  GS  zT  zT  z^  z^  z`  z`  a  a  b  b  b  cf  cq  cq  rv  r|  }E  SX  `a  rb  rb  rb  cg  rg  ch  ch  ch  in  os  oy  FJ  UY  go  p|  g}  FK  zL  zL  Z_  o`  o`  o`  ia  ia  ia  ij  ij		.	.	.	.r"g	.	.	...  P\  CO  6P  6P  0PW~gU7^K%@ub2w U UVtCmF233$tF|ATATDLL\(,jU&;&;XdSVWZ[dmn[o[o[oWopuvxpy  {D  JK  {L  {L  {L  qL  NP  QS  MT  FU  FUH  [a  bg  hp  rt  uw  qx  [y  [y  VZDS1!5!5!55eBi	q@Q@Q@Q6QSUVXRYZZ`fglmvxz{}w~``[_  ++--DJJy4K4KA4N4T4TUhij4k4klm4n4t4t4v4ve  DH  DN  DN  Ob  cd  De  De  fg  Dh  Dn  Dn  Dp  Dp  xC4>>#3#3#;#;HS#I#IV[ce  @D  EG  H  ]h  x}  ~B  xC  KP  QW  KX  rY  rY  qZ  R[  R[  Q\  iq  r|  h}  p~  p~  OS  TV  NW  lw  GL  MQ  GR  Z_  `f  Zg  Ah  Ah  @i  aj  aj  `k  AJ  SX  `h  CG  Z_  `d  Ze  mr  sy  mz  T{  T{  CE  wF  wF  G  G  oH  
I  
ISX  pw  EI  ET  ET  UZ  E[  E[  Ee  Ee  Eg  Eg  sw  sA  sA  sC  sC  ]P  ]P  CG  CM  CM  CO  CO  ]P  ]P  ]P  qu  QF  QF  QF  QF  A  BD  ~E  QF  QF  QF  dh  z  LQ  qR  qR  []  nv  nz  {C	  {G	  nH	  nH	  nR	  nR	  nT	  nT	  
U	  
U	
7Q???DEEEc&'***4D"R));ubW3M3M(HX.\kkK\ej  yA  yE  FN  FR  yS  yS  y]  y]  y_  y_  `  `  a  a  a
7Q???DEEEeDJck  zA  BN  zO  [b  cm  [n  JQ  Rl  Jm  v{  X|  X|  JO  MP  MP  MP  GQ  GQ  GQ  ^f  Ym  YZ  YZ  lm  Rmr   __main__r   )r   ))r&   r<   urllib.errorr?   urllib.parseurllib.requestr   r   r   r   r   pathlibr   zoneinfor   __file__resolveparentsr   homer   r   r   r{   r   r   r   r/   r@   r\   rf   rj   rm   r   r   r   r   r   r  __name__r   rr   r   r   <module>r     s                     



 2 2 2 2 2 2 2 2 2 2            X  (+ty{{66&&h!""
+	'4O
 
 
  
C C C CZ Z ZT T TN N N r r r  
 
 
 
: : :q q q` ` `#m #m #mH Zjj000r   