
    Ii                     X   S SK r S SKrS SKJrJr  S SKJr  S SKJr  S SKJ	r	J
r
Jr  S SKrS SKJr  S SKJr  S SKJr  \R&                  R)                  5       rS	rS
r\rS\-   rS\
\   S\4S jr S!S\S\
\   S\S\S\R<                  4
S jjrSS.S\R<                  S\S\S\\R<                  \	4   4S jjr S"S\S\
\   S\S\S\	4
S jjr! S"S\S\
\   S\S\S\R<                  4
S jjr"S#S\S\S\
\   S\
\   S\R<                  4
S jjr# " S S\$5      r% " S S \ RL                  5      r'g)$    N)datedatetime)GzipFile)BytesIO)AnyOptionalUnion)tzutc)remove_trailing_slash)VERSIONzhttps://us.i.posthog.comzhttps://eu.i.posthog.comzposthog-python/hostreturnc                 j    U =(       d    [         n[        U5      nUS;   a  [        $ US:X  a  [        $ U$ )z"Determines the server host to use.)zhttps://app.posthog.comzhttps://us.posthog.comzhttps://eu.posthog.com)DEFAULT_HOSTr   US_INGESTION_ENDPOINTEU_INGESTION_ENDPOINT)r   host_or_defaulttrimmed_hosts      5/venv/lib/python3.13/site-packages/posthog/request.pydetermine_server_hostr      s:    *lO(9LLL$$	1	1$$    api_keygziptimeoutc                 t   [         R                  " S5      nUn[        R                  " [	        5       S9R                  5       US'   [        U=(       d    [        5      U-   nXS'   [        R                  " U[        S9n	UR                  SU	5        S[        S.n
U(       aR  S	U
S
'   [        5       n[        USS9 nUR                  U	R!                  S5      5        SSS5        UR#                  5       n	[$        R'                  XXS9nUR(                  S:X  a  UR                  S5        U$ ! , (       d  f       NU= f)zPost the `kwargs` to the APIposthog)tzsentAtr   )clszmaking request: %szapplication/json)zContent-Type
User-Agentr   zContent-Encodingw)fileobjmodezutf-8N)dataheadersr      data uploaded successfully)logging	getLoggerr   nowr
   	isoformatr   r   jsondumpsDatetimeSerializerdebug
USER_AGENTr   r   writeencodegetvalue_sessionpoststatus_code)r   r   pathr   r   kwargslogbodyurlr$   r%   bufgzress                 r   r5   r5   "   s     

I
&CD\\UW-779DN
 4
5
<CO::d 23DII"D)1LG&,"#ic, HHT[[)* - ||~
---
IC
#		./J -,s   9!D))
D7T)return_jsonr>   success_messager?   c                   [         R                  " S5      nU R                  S:X  a*  UR                  U5        U(       a  U R	                  5       $ U $  U R	                  5       nUR                  SU5        [        U R                  US   5      e! [        [        4 a!    [        U R                  U R                  5      ef = f)Nr   r&   zreceived response: %sdetail)	r(   r)   r6   r/   r,   APIErrorKeyError
ValueErrortext)r>   r@   r?   r9   payloads        r   _process_responserH   ?   s     

I
&C
#		/"(sxxz1c12((*		)73s(9::j! 2s112s   ;B 1B>c                 2    [        XSX#40 UD6n[        USS9$ )z+Post the `kwargs to the decide API endpointz/decide/?v=3z"Feature flags decided successfullyr@   r5   rH   r   r   r   r   r8   r>   s         r   deciderM   N   s#    
wnd
Fv
FCS2VWWr   c                 4    [        XSX#40 UD6n[        USSS9$ )z6Post the `kwargs` to the batch API endpoint for eventsz/batch/r'   F)r@   r?   rK   rL   s         r   
batch_postrO   T   s(     wi
A&
ACS2N\abbr   r;   c                     [        U=(       d    [        5      U-   n[        R                  " USU -  [        S.US9n[        USU S3S9$ )Nz	Bearer %s)Authorizationr    )r%   r   zGET z completed successfullyrJ   )r   r   requestsgetr0   rH   )r   r;   r   r   r>   s        r   rS   rS   \   sK    
 4
5
;C
,,skG6K[e$fpw
xCSD=T2UVVr   c                   6    \ rS rSrS\\\4   S\4S jrS rSr	g)rC   b   statusmessagec                     X l         Xl        g NrW   rV   )selfrV   rW   s      r   __init__APIError.__init__c   s    r   c                 R    SnUR                  U R                  U R                  5      $ )Nz[PostHog] {0} ({1}))formatrW   rV   )r[   msgs     r   __str__APIError.__str__g   s     #zz$,,44r   rZ   N)
__name__
__module____qualname____firstlineno__r	   intstrr\   ra   __static_attributes__ r   r   rC   rC   b   s"    uS#X  5r   rC   c                   "    \ rS rSrS\4S jrSrg)r.   l   objc                     [        U[        [        45      (       a  UR                  5       $ [        R
                  R                  X5      $ rY   )
isinstancer   r   r+   r,   JSONEncoderdefault)r[   rm   s     r   rq   DatetimeSerializer.defaultm   s7    cD(+,,==?"''22r   rj   N)rc   rd   re   rf   r   rq   ri   rj   r   r   r.   r.   l   s    33 3r   r.   )NNF   )NFrs   )NN)(r,   r(   r   r   r   r   ior   typingr   r   r	   rR   dateutil.tzr
   posthog.utilsr   posthog.versionr   sessionsSessionr4   r   r   r   r0   rh   r   boolrg   Responser5   rH   rM   rO   rS   	ExceptionrC   rp   r.   rj   r   r   <module>r~      s     #   ' '   / #$$&2 2 $(
	 	# 	 ]_ ?CVY< JN2			2-02BF2
8c!"2XC Xx} X4 XRU Xil X RTcc c48cKNccW W3 Whsm WXc] W^f^o^o W5y 53)) 3r   