
    {j]
                     b    d dl Z d dlZd dlmZmZ dZ G d de      ZddZd Z	ddZ
dd	Zd
 Zy)    N)Requesturlopenzhttps://api.buffer.comc                       e Zd Zy)BufferErrorN)__name__
__module____qualname__     +/opt/struktur/asol-runtime/buffer_bridge.pyr   r      s    r   r   c                    d|i}|||d<   t        t        t        j                  |      j	                  d      d| z   dd      }t        |d	      5 }t        j                  |      }d d d        j                  d
      r!t        |d
   d   j                  dd            |j                  d      xs i S # 1 sw Y   PxY w)Nquery	variableszutf-8zBearer zapplication/json)AuthorizationzContent-Type)dataheaders   )timeouterrorsr   messagezBuffer GraphQL errorr   )	r   API_URLjsondumpsencoder   loadgetr   )tokenr   r   payloadreqresponser   s          r   _gqlr!   
   s    G(
'

7 3 : :7 C"U**N C 
b	! #Xyy"#xx$x.+//	;QRSS88F!r!	# #s   B88Cc                     t        | d      S )Nz){ account { organizations { id name } } })r!   )r   s    r   _accountr#      s    BCCr   c                     |sLt        |       j                  di       j                  dg       }t        |      dk7  rt        d      |d   d   }d}t	        | |d|i      j                  d	g       S )
Naccountorganizations   z3Buffer account must expose exactly one organizationr   idzquery Channels($org: OrganizationId!) {
      channels(input: {organizationId: $org}) { id name displayName service isQueuePaused }
    }orgchannels)r#   r   lenr   r!   )r   organization_idorgsr   s       r   r*   r*      sv    ""9b155orJt9>STTq'$-	E uuo67;;JKKr   c                 ,   |dk(  rdn|}t        | |      D cg c]  }|j                  d      |k(  s| }}t        |      dk7  rt        d| dt        |             |d   }d}d	||d
   ddddi}	t	        | ||	      j                  d      xs i }
|
j                  d      rt        |
d         |
j                  d      }|r|j                  d
      st        d      |d
   |d
   |j                  d      xs |j                  d      |dS c c}w )Nreels	instagramservicer'   z(Expected exactly one Buffer channel for z, found r   zmutation CreateDraft($input: CreatePostInput!) {
      createPost(input: $input) {
        ... on PostActionSuccess { post { id text } }
        ... on MutationError { message }
      }
    }inputr(   	automatic
addToQueueT)text	channelIdschedulingTypemodesaveToDraft
createPostr   postzBuffer returned no post iddisplayNamename)post_id
channel_idchannelr1   )r*   r   r+   r   r!   )r   platformr5   r,   r1   cmatchesr@   mutationr   resultr;   s               r   create_draftrF   &   sC   %0khG"5/:ZQaeeI>NRY>YqZGZ
7|qDWIXVYZaVbUcdeeajG	H T]% I %9-11,?E2Fzz)&+,,::fDtxx~677Dz7;;WdKeK|ipititu{i|  JQ  R  R/ [s
   DDc                     t         j                  j                  | d      j                         }|st	        d|        |S )N zMissing )osenvironr   stripr   )r=   r   s     r   token_from_envrL   A   s9    JJNN4$**,EHTF+,,Lr   )N)r   rI   urllib.requestr   r   r   RuntimeErrorr   r!   r#   r*   rF   rL   r
   r   r   <module>rO      s;     	 +
"	, 	"D	LR6r   