
    Zi                     L   d dl Z d dlZd dlmZmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZ d dlZd dlmZ d dlmZ d dlmZ d d	lmZ ej                             ed
d
d
                    Zej                                        Ze                    de           dZdZeZdez   Zde
e          de fdZ!	 	 	 	 d/de de
e          de"de#dej$        f
dZ%dddej$        de de"deej$        e	f         fdZ&	 	 	 d0de de
e          de"de#de	f
d Z'	 	 	 d0de de
e          de"de#de	f
d!Z(	 d1d#e de
e          d$e de#de	f
d%Z)	 	 	 d0de de
e          de"de#dej$        f
d&Z*	 d2de d'e de
e          de
e#         dej$        f
d(Z+ G d) d*e,          Z- G d+ d,e-          Z. G d- d.e j/                  Z0dS )3    N)datedatetime)GzipFile)BytesIO)AnyOptionalUnion)tzutc)Retry)remove_trailing_slash)VERSION   )totalconnectread)max_retrieszhttps://zhttps://us.i.posthog.comzhttps://eu.i.posthog.comzposthog-python/hostreturnc                 f    | pt           }t          |          }|dv rt          S |dk    rt          S |S )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      J/root/projects/butler/venv/lib/python3.11/site-packages/posthog/request.pydetermine_server_hostr   !   sC    *lO(99LLLL$$	1	1	1$$    F   api_keygziptimeoutc                    t          j        d          }|}t          j        t	                                                                |d<   t          |pt                    |z   }| |d<   t          j	        |t                    }	|                    d|	|           dt          d}
|rxd	|
d
<   t                      }t          |d          5 }|                    |	                    d                     ddd           n# 1 swxY w Y   |                                }	t$                              ||	|
|          }|j        dk    r|                    d           |S )zPost the `kwargs` to the APIposthog)tzsentAtr   )clszmaking request: %s to url: %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   r<   r<   -   s    
I
&
&CD\UWW---7799DN
 4
5
5
<CDO:d 2333DII-tS9991LLG &,"#iic,,, 	+ HHT[[))***	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ ||~~
--$-
I
IC
#		.///Js   )DD	DT)return_jsonrE   success_messagerF   c                X   t          j        d          }| j        dk    r|                    |           |r|                                 n| }t          |t                    rSd|v rOt          |d         t                    r4d|d         v r*|                    d           t          | j        d          |S 	 |                                 }|                    d|           t          | j        |d                   # t          t          f$ r t          | j        | j                  w xY w)	Nr#   r-   quotaLimitedfeature_flagsz[FEATURE FLAGS] PostHog feature flags quota limited, resetting feature flag data.  Learn more about billing limits at https://posthog.com/docs/billing/limits-alertszFeature flags quota limitedzreceived response: %sdetail)r/   r0   r=   r6   r3   
isinstancedictlistwarningQuotaLimitErrorAPIErrorKeyError
ValueErrortext)rE   rG   rF   r@   responsepayloads         r   _process_responserW   O   s8    
I
&
&C
#		/"""!,5388:::#
 x&&		R(**8N3T:: +8N#;;;KK w   "#/3PQQQ2((**		)7333s(9:::j! 2 2 2s1112s   8AC= =,D)c                 F    t          | |d||fi |}t          |d          S )z+Post the `kwargs to the decide API endpointz/decide/?v=4z"Feature flags decided successfullyrG   r<   rW   r   r   r    r!   r?   rE   s         r   decider\   l   s5     wndG
F
Fv
F
FCS2VWWWWr   c                 F    t          | |d||fi |}t          |d          S )z*Post the `kwargs to the flags API endpointz/flags/?v=2z$Feature flags evaluated successfullyrY   rZ   r[   s         r   flagsr^   x   s>     wmT7
E
Ef
E
ECC   r    personal_api_keykeyc                 .    t          | d| d||          S )z<Get remote config flag value from remote_config API endpointz%/api/projects/@current/feature_flags/z/remote_config/)get)r`   r   ra   r!   s       r   remote_configrd      s-     DDDD	  r   c                 H    t          | |d||fi |}t          |dd          S )z6Post the `kwargs` to the batch API endpoint for eventsz/batch/r.   F)rG   rF   rZ   r[   s         r   
batch_postrf      s@     wiw
A
A&
A
AC9u   r   rB   c                     t          |pt                    |z   }t          j        |d| z  t          d|          }t          |d| d          S )Nz	Bearer %s)Authorizationr'   )r,   r!   zGET z completed successfullyrY   )r   r   requestsrc   r7   rW   )r   rB   r   r!   rE   s        r   rc   rc      sh       4
5
5
;C
,"-"7zRR  C
 S2U2U2U2UVVVVr   c                   4    e Zd Zdeeef         defdZd ZdS )rQ   statusmessagec                 "    || _         || _        d S N)rl   rk   )selfrk   rl   s      r   __init__zAPIError.__init__   s    r   c                 F    d}|                     | j        | j                  S )Nz[PostHog] {0} ({1}))formatrl   rk   )ro   msgs     r   __str__zAPIError.__str__   s    #zz$,444r   N)__name__
__module____qualname__r	   intstrrp   rt    r   r   rQ   rQ      sM        uS#X     5 5 5 5 5r   rQ   c                       e Zd ZdS )rP   N)ru   rv   rw   rz   r   r   rP   rP      s        Dr   rP   c                       e Zd ZdefdZdS )r5   objc                     t          |t          t          f          r|                                S t          j                            | |          S rn   )rL   r   r   r2   r3   JSONEncoderdefault)ro   r}   s     r   r   zDatetimeSerializer.default   s@    cD(+,, 	#==??"''c222r   N)ru   rv   rw   r   r   rz   r   r   r5   r5      s/        33 3 3 3 3 3 3r   r5   )NNFr   )NFr   )Nr_   r   )NN)1r3   r/   r   r   r    r   ior   typingr   r   r	   ri   dateutil.tzr
   urllib3.util.retryr   posthog.utilsr   posthog.versionr   adaptersHTTPAdapteradaptersessionsSessionr;   mountr   r   r   r7   ry   r   boolrx   Responser<   rW   r\   r^   rd   rf   rc   	ExceptionrQ   rP   r   r5   rz   r   r   <module>r      s^     # # # # # # # #             ' ' ' ' ' ' ' ' ' '        $ $ $ $ $ $ / / / / / / # # # # # # 

'
'   (   $$&& z7 # # #2 2 $(
	 	# 	 	 	 	 	 
3- 	
     F JN2 2 2		2-02BF2
8c!"2 2 2 2> 		X 	X	X
3-	X 	X 		X 		X 	X 	X 	X 	 
3-  	 	    VX	 		!)#	<?	OR		 	 	 	 	 
3-  	     RV	W 	W	W	W"*3-	WAI#	W	W 	W 	W 	W5 5 5 5 5y 5 5 5	 	 	 	 	h 	 	 	3 3 3 3 3) 3 3 3 3 3r   