
    	^j.K              
         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d dlZd dlZd dlZd dlmZ  ee                                          j        d         Zedz  Z ed          ZdZdZd	Z ej        d
          Zd@dZdAdZdBdZdCdZdDdZ ddddEd$Z!dFd&Z"dGd(Z#dHd*Z$dId,Z%dJd/Z&dKd0Z'dLd1Z(dMd7Z)dNd8Z*e+d9k    rw	  ej,         e*                       dS # e-$ rTZ. e/ ej0        d:d; e1e.          j+         d<e. d=d;>          ej2        ?            ej,        d           Y dZ.[.dS dZ.[.ww xY wdS )O    )annotationsN)Path   zscript/project-manifest.jsonz-/home/hermes/.config/gac-mai-audio/postiz.envcmrilrryn0011j7c8kfzgx9zqcmriltjyk0013j7c8l7dp3o5iu   Gác Mái AudiozAsia/Ho_Chi_Minhpathr   returnstrc                   t          j                    }|                     d          5 t          fdd          D ]}|                    |           	 d d d            n# 1 swxY w Y   |                                S )Nrbc                 .                          d          S )Ni   )read)handles   script/publish-postiz.py<lambda>zsha256.<locals>.<lambda>   s    &++o">">     r   )hashlibsha256openiterupdate	hexdigest)r   digestchunkr   s      @r   r   r      s    ^F	4 !F>>>>DD 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   ,A##A'*A'manifestdictkeyc                   |                      d          pi                      |          }t          |t                    r|st          d| d          t	          |          }|                                s
t          |z  }	 |                                                    t                                                     n%# t          $ r}t          d|           |d }~ww xY w|S )Nactive_pathszactive_paths.z is missingzactive path escapes project: )
get
isinstancer
   RuntimeErrorr   is_absoluteROOTresolverelative_to
ValueError)r   r   valuer   excs        r   resolve_activer*   #   s    \\.))/R44S99EeS!! = =;3;;;<<<;;D d{K""4<<>>2222 K K K@3@@AAsJKKs   >C 
C$CC$r(   Nonec                   | j                             dd           t          j        |dd          dz                       d          }t          j        d| j         d| j         	          \  }}	 t          j	        |d
          5 }|
                    |           |                                 t          j        |                                           d d d            n# 1 swxY w Y   t          j        ||            t          j                            |          rt          j        |           d S d S # t          j                            |          rt          j        |           w w xY w)NT)parentsexist_okF   )ensure_asciiindent
utf-8.)prefixdirwb)parentmkdirjsondumpsencodetempfilemkstempnameosfdopenwriteflushfsyncfilenoreplacer   existsunlink)r   r(   datafdr?   r   s         r   atomic_jsonrK   1   s   KdT222Ju5;;;dBJJ7SSD'749'7'7'7T[IIIHBYr4   	&FLLLLNNNHV]]__%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	
47>>$ 	IdOOOOO	 	27>>$ 	IdOOOO	s1   2D: AC#D: #C''D: *C'+D: :6E0dict[str, str]c                    t                                           st          d          t          j        t                                           j                  dk    rt          d          i } t                               d                                          D ]}|                                }|rn|	                    d          sYd|v rU|
                    dd          \  }}|                                                    d	          | |                                <   d
 |                                 D             d}fd|D             }|rt          d|           S )Nz$Postiz configuration file is missingi  z2Postiz configuration file permissions must be 0600r3   encoding#=r   z"'c                V    i | ]&\  }}|t           j                            ||          'S  )r@   environr    ).0r   r(   s      r   
<dictcomp>zconfig.<locals>.<dictcomp>K   s.    TTT*#uc2:>>#u--TTTr   )POSTIZ_BASE_URLPOSTIZ_API_KEYPOSTIZ_FACEBOOK_INTEGRATION_IDPOSTIZ_YOUTUBE_INTEGRATION_IDc                >    g | ]}                     |          |S rS   r    )rU   r   valuess     r   
<listcomp>zconfig.<locals>.<listcomp>M   s(    >>>sfjjoo>s>>>r   z+Postiz configuration is missing variables: )ENV_FILErG   r"   statS_IMODEst_mode	read_text
splitlinesstrip
startswithsplititems)file_valuesliner   r(   requiredmissingr]   s         @r   configrm   @   s[   ?? CABBB|HMMOO+,,55OPPP"$K""G"44??AA B Bzz|| 	B,, 	BC++JC',{{}}':':5'A'AK		$TT@Q@Q@S@STTTFwH>>>>h>>>G TRRRSSSMr   rawbytesobjectc                    |                      dd          }	 t          j        |          S # t          j        $ r d|d d         icY S w xY w)Nr3   rF   )errorsrn     )decoder:   loadsJSONDecodeError)rn   texts     r   decode_json_bodyrx   S   sc    ::gi:00D$z$ $ $ $tETE{####$s   - A
Ax   payloadtimeoutbaser{   dict | Noner|   intc          
     h   |d n(t          j        |d                              d          }d|i}d}|d|d<   d}t          j                            | |z   |||	          }	 t          j                            ||
          5 }	t          |	                                          cd d d            S # 1 swxY w Y   d S # t          j	        j
        $ r]}
t          |
                                          }t          d|
j         dt          j        |d          d d                    |
d }
~
ww xY w)NFr0   r3   AuthorizationGETzapplication/jsonzContent-TypePOST)rI   headersmethodr|   zPostiz HTTP : rs   )r:   r;   r<   urllibrequestRequesturlopenrx   r   error	HTTPErrorr"   code)r}   r   r   r{   r|   rI   r   r   reqresponser)   bodys               r   request_jsonr   [   s   ?44
7(O(O(O(V(VW^(_(_D$GF"4
.
 
 4QW
 
X
XCn^##C#99 	5X#HMMOO44	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5<! n n n

++c#(ccdjTY6Z6Z6Z[`\`[`6accddjmmns=   $!C  !B3&C  3B77C  :B7;C   D1AD,,D1datetime.datetimec                L   |                      d          r| d d         dz   } t          j                            |           }|j        %|                    t          j        j                  }|                    t          j        j                                      d          S )NZ+00:00tzinfor   microsecond)endswithdatetimefromisoformatr   rF   timezoneutc
astimezone)r(   parseds     r   
parse_dater   k   s    ~~c &crc
X%,,U33F}x'8'<==X.233;;;JJJr   
list[dict]c                    t          | t                    rd | D             S t          | t                    r=dD ]:}|                     |          }t          |t                    rd |D             c S ;g S )Nc                <    g | ]}t          |t                    |S rS   r!   r   rU   items     r   r^   zposts_list.<locals>.<listcomp>v   s'    AAA*T4*@*@AAAAr   )postsrI   c                <    g | ]}t          |t                    |S rS   r   r   s     r   r^   zposts_list.<locals>.<listcomp>{   s'    III*T42H2HIIIIr   )r!   listr   r    )r(   r   rh   s      r   
posts_listr   t   s    % BAAAAAA% J$ 	J 	JCIIcNNE%&& JIIIIIIIIJIr   postc                    t          |                     d          pi                     d          p|                     d          pd          S )NintegrationidintegrationId )r
   r    )r   s    r   integration_idr      sF    -((.B33D99\TXXo=V=V\Z\^^^r   tuple[datetime.datetime, dict]c           
        t           j                             t                    }|t          j        d          z   }t          j                            |                    t           j        j	                  
                                                    dd          |                    t           j        j	                  
                                                    dd          d          }t          t          | |d|z   d                    }t          t                      t           t                      i}d	}|D ]}t#          |          }	|	|vr|d
z  }t%          |                    d          pd                                          dvrT|                    d          p|                    d          }
|
r5||	                             t-          t%          |
                               t/          d          D ]8}|                                t          j        |          z   }dD ]\  }}t          j         |j        |j        |j        ||t                    }||k    r;|                    t           j        j	                                      d	          }||t                   vr||t                    vrv||
                                |
                                                    dd          t9          |t                             t9          |t                              |dfc c S 	:t;          d          )N   )daysr   r   	startDateendDate/posts?<   r   r   r   stater      QUEUE	PUBLISHEDpublishDatedate   ))	      )   r   r   r   )localr   facebook_occupiedyoutube_occupiedother_posts_ignoredz&no common target slot found in 30 days)r   nowTZ	timedeltar   parse	urlencoder   r   r   	isoformatrF   r   r   FBsetYTr   r
   r    upperaddr   ranger   yearmonthdaylenr"   )r}   r   r   endqueryr   occupiedignoredr   targetr(   offsetr   hourminuter   r   s                    r   	find_slotr      s   




#
#C
"+++
+CL""^^H$5$9::DDFFNNxY\]]>>("3"788BBDDLLXWZ[[$ $  E |D#y5/@"MMMNNECEE2suu%HG 	9 	9%%!!qLGtxx  &B''--//7MMM'';488F+;+; 	9V  CJJ!7!7888))  hhjj8-6::::. 
	 
	LD&%ch	37D&Y[\\\E||""8#4#899AAaAPPC(2,&&3hrl+B+B"__..s}}7N7NxY\7]7]),Xb\):):PST\]_T`PaPa+2       
	 ?
@
@@r   slotdict[str, dict]c                   |t          j        d          z
  }|t          j        d          z   }t          j                            |                                                    dd          |                                                    dd          d          }i }t          t          | |d|z   d                    D ]}t          |          }|
                    d	          p|
                    d
          }	t          |
                    d          pd                                          }
|t          t          hv rB|	r@t          t          |	                    |k    r |
dv r|
                    d          |
|	d||<   |S )Nr   )minutesr   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   )r   r   r   r   r   r   rF   r   r   r   r    r
   r   r   r   r   )r}   r   r   startr   r   foundr   r   r(   r   s              r   posts_at_slotr      su   8%a0000E
#A...
.CL""__&&..x====??**8S99$ $  E  E<c9u3DbQQQRR Y Y%%'';488F+;+;DHHW%%+,,2244b"X%Js5zz,B,Bd,J,JuXnOnOn#'88D>>ERWXXE&MLr   c                V    |                      dd                               dd          S )N\z\\"z\")rF   )r(   s    r   curl_escaper      s&    ==v&&..sE:::r   c           
        dt          |           dt          t          |                     d}t          j        dddddd	| d
z   g|dd          }|j        dk    rt          d|j        dd                     t          j        |j	                  }t          |t                    r=t          |                    d          t                    r|                    d          n|}t          |t                    r*|                    d          r|                    d          st          d          |d         |d         dS )Nzheader = "Authorization: z"
form = "file=@z"
curlz--fail-with-bodyz--silentz--show-errorz--config-z/uploadT)inputrw   capture_outputr   zupload failed: i0mediar   r   z#upload response lacks media id/path)r   r   )r   r
   
subprocessrun
returncoder"   stderrr:   ru   stdoutr!   r   r    )r}   r   r   config_text	completedr(   r   s          r   uploadr      sa   	5K$4$4 	5 	5$SYY//	5 	5 	5  "J
CQUXaQa tD: : :I q  GY-=eff-EGGHHHJy'((E",UD"9"9mjSZI[I[]a>b>bmEIIghmEeT"" B%))D// B6ARAR B@AAA+uV}555r   projectpathsdict[str, Path]r]   readyc                l   |d         t           k    s|d         t          k    rt          d          t          ||dd          }t	          |t
                    o|                    d          du }t          ||d	d          }t	          |t                    r|}	nBt	          |t
                    r+|                    d
|                    dg                     }	ng }	g }
dt           fdt          ffD ]\  }t          fd|	D             d           }|pi                     d          p|pi                     d          pd}t          |pi                     d          p|pi                     d          pd          }||
                                v }|d n|                    d          }|t          k    }|
                    |||||||d ud           |ot          d |
D                       }|rdnd|||d         t          |d                   t          |d                   dt          j                            t          j        j                                                  t          |t           t          d|
d|rdndd }t)          |d!         |           |st          d"          |S )#NrY   rZ   z0effective Postiz integration configuration driftz/is-connectedr   r   	connectedTz/integrationsintegrationsrI   facebookyoutubec              3     K   | ]A}t          |t                    t          |                    d                     k    =|V  BdS )r   N)r!   r   r
   r    )rU   entryr   s     r   	<genexpr>z identity_gate.<locals>.<genexpr>   sV      ssu
5$8O8OsTWX]XaXabfXgXgThThlrTrTrUTrTrTrTrssr   r?   displayNamer   
identifierproviderdisabled)platformr   r  display_namer  brand_matchprovider_matchrG   c              3  Z   K   | ]&}|d          o|d         du o|d         o|d         V  'dS )rG   r  Fr  r  NrS   r   s     r   r
  z identity_gate.<locals>.<genexpr>   sj         U   U  EIX 4
3Cu3L QUVcQd imn~i   U   U   U   U   U   Ur   r   failedsource_canon_sha256r  r   r   r  r  Fz;exact IDs, providers, enabled state and display names matchzidentity/configuration mismatch)statusverifiedpublish_allowedr  publish_ready_receipt
checked_attarget_brandr  effective_integration_idsr  user_overridereasonidentityz.Postiz Identity Gate failed; upload is blocked)r   r   r"   r   r!   r   r    r   nextr
   casefoldBRANDappendallr   r   r   r   r   r   rK   )r   r   r]   r}   r   r  connected_objr  rn   r  resultsr  r   displayr  r  r  r  allowedreceiptr   s                       @r   identity_gater,     s   ./255@_9`df9f9fMNNN sORHHHM=$//ZM4E4Ek4R4RVZ4ZI
tS/2
>
>
>C#t 	C		 ww~swwvr/B/BCCG("-	2?  &sssssssuyzz:2""6**Stzr.>.>}.M.MSQS$*")),77]DJB;K;KJ;W;W][]^^
!Z%8%8%:%::<44TXXj-A-A& j#+,D8H
 
 	 	 	 	
   UC   U   U  MT   U   U   U  U  UG!(6++hG"5AV;W*-eGn*=*=PUV]P^I_I_!`!`'++H,=,ABBLLNNI24%D%D%SZ  BOO  aB	 	G j!7+++ MKLLLNr   c                 <   t          j        t                              d                    } t	          | d          t	          | d          t	          | d          t	          | d          t	          | d          t	          | d          t	          | d	          t	          | d
          t	          | d          t	          | d          d
}|d                                         rt          d          t          j        |d                             d                    }t          j        |d                             d                    }t          j        |d                             d                    }t          j        |d	                             d                    }|                     d          }|                    d          dk    s0|                    d          dus|                    d          |k    rt          d          |                    d          dus|                    d          |k    rt          d          |                    d          dk    s0|                    d          dus|                    d          |k    rt          d          |                    d          dus|                    d          |k    rt          d          |d         |d         |d         fD ]E}|                                r|                                j	        dk    rt          d |           Ft          |d                   }t          |d                   }	t          |d                   }
|d         j                                        d!k    s#|d                                         j	        d"k    rt          d#          |                    d$          |k    s6|                    d%          |d                                         j	        k    rt          d&          |                    d$          |
k    rt          d'          |                    d(          pi                     d)          pi }|                    d(          pi                     d          pi }|                    d*          |k    s|                    d*          |	k    rt          d+          t          t                              d,                    st          d-z                                  rt          d.          t!                      }|d/                             d0          }|d1         }t%          | |||||          }t'          ||          \  }}|d2                                         r.t          j        |d2                             d                    ni }|                    d          |k    }|r/|                    d3          |k    r|                    d          }nt)          |||d                   }d4d5|t+          |d6                   t          |d6                   d7t+          |d                   ||d                                         j	        |t,          j                            t,          j        j                                                  d8	}t7          |d2         |           t9          |t:                    r*|                    d9          r|                    d:          st          d;          |r/|                    d<          |	k    r|                    d          }nt)          |||d                   }|                    ddt+          |d                   |	|d                                         j	        |t,          j                            t,          j        j                                                  d=           t7          |d2         |           t9          |t:                    r*|                    d9          r|                    d:          st          d>          t'          ||          \  }}t?          |||          }|r4tA          |          tB          tD          hk    rd?d@i}nt          dA          |d                             d          }|#                                d         $                                }dBtK          |          cxk    rdCk    sn t          dD          d|                                &                    dEdF          d5g d9tB          i||gdGgdHdIidJd9tD          i||gdGgdK|dLdM|g dNdJgdO}t          j        t          j'        |d5P                    }dQ |dR         D             }tQ          dS |dR         D                       } tK          |dR                   dBk    s2|tB          tD          hk    s | r|dR         dT         dU         dV         g k    rt          dW          tS          ||dX|dYZ          }t?          |||          }!tA          |!          tB          tD          hk    }"|"rdnd[|"||*                    tV                                                    |                                &                    dEdF          t+          |d6                   t          |d6                   |d\         d]||t+          |d2                   t          |d2                   d7||!tB          tD          d^t,          j                            t,          j        j                                                  d_}#t7          |d         |#           tY          t          j'        |#d         |"|#d`         |#da         |!t+          |d                   dbd5P                     |"rdndTS )cNr3   rN   r  promotion_receipttranscode_receiptfinal_uploadintro_normalizedmetadatametadata_receiptpostiz_identity_receiptpostiz_media_receiptpostiz_schedule_receipt)
r  	promotion	transcodevideo	thumbnailr2  r3  r!  r   scheduler;  zTPostiz schedule receipt already exists and requires audit; refusing duplicate creater  r7  r8  canon_sha256r  r   r  Tr  z0publish-ready receipt is absent, failed or stalez,promotion receipt is absent, failed or stalez,transcode receipt is absent, failed or stalez+metadata receipt is absent, failed or staler9  r:  r   z#publish artifact missing or empty: z.mp4i ʚ;z6upload copy is not a valid MP4 under one billion bytesartifact_sha256artifact_bytesz*upload copy differs from transcode receiptz&metadata differs from verified receipt	artifactsr   r   z4video/thumbnail differs from publish-ready artifactszDO_NOT_PUBLISH*publish_blockzpublish block marker existsrW   /rX   r   video_sha256video_uploadedFr!  r  )	r  r  r  identity_receipt
video_pathrB  video_bytesr9  video_uploaded_atr   r   z!video media checkpoint is invalidthumbnail_sha256)r  r  thumbnail_pathrH  thumbnail_bytesr:  completed_atz%thumbnail media checkpoint is invalidskippedzboth posts already existzApartial posts already exist at target slot; refusing blind creater/   d   zYouTube title length invalidr   r   )contentimage__typer  )r   r(   settingsr  publicno)rP  titletypeselfDeclaredMadeForKidsr:  tags)rU  r   	shortLinkrW  r   r   c                *    h | ]}|d          d         S )r   r   rS   rU   r   s     r   	<setcomp>zmain.<locals>.<setcomp>b  s"    EEETtM"4(EEEr   r   c              3     K   | ]^}|d          d         d         d                              d          o,|d          d         d         d                              d          V  _dS )r(   r   rO  r   r   Nr\   rZ  s     r   r
  zmain.<locals>.<genexpr>c  s        M  Mtx4=+G4Q7;;DAAnd7mTUFVW^F_`aFbFfFfgmFnFn  M  M  M  M  M  Mr   r   rQ  rW  z+serialized Postiz payload validation failedz/postsry   rz   partial_failurer  )r   r   r  r  )r  r  r  
slot_localslot_utcrD  calendar_preflightcalendar_before_createmedia_receiptcreated_responser   integration_idsverified_atr^  r_  )r  r  r^  r_  r   r+  )-r:   ru   PROJECT_MANIFESTrc   r*   rG   r"   r    r`   st_sizer   suffixr#  anyr$   globrm   rstripr,  r   r   r
   r   r   r   r   r   rK   r!   r   r   r   r   r   r   rd   re   r   rF   r;   r&  r   r   r   print)$r   r   r  r7  r8  r3  canonr   
video_hash
thumb_hashmetadata_hashready_uploadready_thumbr]   r}   r   r!  _r`  rb  
same_canonvideo_mediathumb_mediar   ra  existingcreatedrw   rT  r{   r   idsmedia_validr   r  r+  s$                                       r   mainr{     s+   j)33W3EEFFG)@AA#G-@AA#G-@AA88#G-?@@"7J77*74FGG"7,EFF)?@@"7,EFF E Z!! sqrrrJuW~///AABBE
5-777IIJJI
5-777IIJJIz%(:";"E"Ew"E"W"WXXKK''Eyyk))UYYz-B-B$-N-NRWR[R[\qRrRrv{R{R{MNNN}}Z  ,,	>S0T0TX]0]0]IJJJ}}X+--z1J1JRV1V1VZcZgZgh}Z~Z~  CH  [H  [HIJJJJ''t337G7K7KLa7b7bfk7k7kHIIIw{!3U:5FG M M{{}} 	M		 3q 8 8KTKKLLL !9g''Jk*++J5,--MW~%%''611U7^5H5H5J5J5RVc5c5cSTTT}}&'':55GW9X9X\abi\j\o\o\q\q\y9y9yGHHH-..-??CDDDIIk**0b55h??E2L99[))/R44[AAGRK!!Z//;??83L3LPZ3Z3ZQRRR
499&''(( :TO-C,K,K,M,M :8999XXF#$++C00D
!
"CWeVT3FFH%dC00ANST[nNcNcNeNemDJuW~777IIJJJkmM""#899UBJ 3m''77:EE#''00T3g77&ERW),U:->)?)?6RWXbRcKdKd e eeGn--z >..008;!)!2!6!6x7H7L!M!M!W!W!Y!Y
 
 	E'NM222k4(( @0E0E @[__]cMdMd @>??? 
3m''(:;;zII#''44T3k(:;;!t!%"455:$[16688@{$-11(2C2GHHRRTT	
 
 	 	 	 	E'NM222k4(( D0E0E D[__]cMdMd DBCCC#,T3#7#7 D
 T3--H Qx==RH$$(*DEGGbcccZ **G*<<!!!$**,,CJJ%%%%#%%%%=>>>(8(8(@(@3(O(O!%r
$R]Q^6_6_5`ow  zD  oE  F  F!%r
$R]Q^6_6_5`  zC  NS  ]e  BF  U`  jl  om  om  n  n
 
 DJwUCCCDDEEVG_EEE  M  M  }C  DK  }L  M  M  M  M  Mvg1$$Bx{fU\o^_N`akNlmsNtxzNzNzLMMMtS(FCPPP$T**E5zzb"X%H!)@++/@h$oob))33554>>CSCSC[C[\dfiCjCj%(z):%;%;veT^N_G`G`u}  P  vQ  R  R0Lb"%eGn"5"5gAWAWXX#e(*r::(,,X->-BCCMMOO
 
G j!7+++	$*(#l+9L3uZ'8#9#9  	     
 11ar   __main__r  Fr   )r  r  r   r   )file)r   r   r	   r
   )r   r   r   r
   r	   r   )r   r   r(   r   r	   r+   )r	   rL   )rn   ro   r	   rp   )r}   r
   r   r
   r   r
   r{   r~   r|   r   r	   rp   )r(   r
   r	   r   )r(   rp   r	   r   )r   r   r	   r
   )r}   r
   r   r
   r	   r   )r}   r
   r   r
   r   r   r	   r   )r(   r
   r	   r
   )r}   r
   r   r
   r   r   r	   r   )r   r   r   r  r]   rL   r}   r
   r   r
   r  r   r	   r   )r	   r   )3
__future__r   r   r   r:   r@   r`   r   sysr=   urllib.errorr   urllib.parseurllib.requestzoneinfopathlibr   __file__r%   r-   r$   rf  r_   r   r   r$  ZoneInfor   r   r*   rK   rm   rx   r   r   r   r   r   r   r   r   r,  r{  __name__exit	Exceptionr)   rl  r;   rU  r   rS   r   r   <module>r     s/   " " " " " "    				      



                    tH~~'*88 4?@@  X)**            &$ $ $ $ LP`c n n n n n n K K K K   _ _ _ _!A !A !A !AH   "; ; ; ;6 6 6 6$' ' ' 'TC  C  C  C L z   jdjH%TTRUYYM_JhJhcfJhJhiix}~~~  FI  FP  	Q  	Q  	Q  	Q s   C, ,E1A	E  E