
    g                     \   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 d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZmZ d d
lmZ d dlmZmZmZmZm Z m!Z! d dl"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( 	 d dl)Z)ejX                  eefZ-dZ. G d de/      Z0d Z1d Z2y# e*$ r d dl+Z)Y .w xY w)    N)datetime	timedelta)UUIDuuid4)tzutc)string_types)Consumer)ExceptionCapture)exc_info_from_errorexceptions_from_error_tuplehandle_in_app)InconclusiveMatchErrormatch_feature_flag_properties)Poller)DEFAULT_HOSTAPIError
batch_postdecidedetermine_server_hostget)SizeLimitedDictcleanguess_timezoneremove_trailing_slash)VERSIONiP  c                      e Zd ZdZ ej
                  d      Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d'dZd(dZ	 d)dZ		 d)d	Z
	 d)d
Zd)dZ	 	 	 	 	 	 	 	 	 d*dZd(dZd(dZ	 	 	 	 	 	 	 	 d+dZd(dZ	 d,dZ	 	 	 	 	 	 	 d,dZd Zd Zd Zd Zd Zd Zi i i dddZi i i dddddZi i i dddddZdi i i dddddZd  Zi i i ddd!d"Zi i i ddd!d#Z i i i ddd$Z!d% Z"d& Z#y)-ClientzCreate a new PostHog client.posthogNFTc                    t        j                  |      | _         |xs || _        t        d| j                  t               || _        || _        || _        || _        |xs t        | _
        t        |      | _        |	| _        || _        d | _        d | _        d | _        d | _        || _        || _        d | _        t-        t.        t0              | _        || _        || _        || _        || _        || _        || _        d | _         || _!        |	 tE        jF                         }|| _%        || _&        |r>tO        jP                          | jR                  jU                  tN        jV                         n)| jR                  jU                  tN        jX                         | j<                  rt[        | | j>                        | _         |rd | _.        y |rt_        j`                  | jb                         te        |      D ]j  }g | _.        tg        | j                   | j                  | j                  ||||	|
||
      }| j\                  ji                  |       |s[|jk                          l y # tH        $ r d }Y Qw xY w)Napi_key)integrations)hoston_errorflush_atflush_intervalgzipretriestimeouthistorical_migration)6queueQueuer    requirer   r#   debugsend	sync_moder   raw_hostr   r"   r&   r(   feature_flagsfeature_flags_by_keygroup_type_mappingcohortspoll_interval%feature_flags_request_timeout_secondspollerr   MAX_DICT_SIZEset#distinct_ids_feature_flags_reporteddisableddisable_geoipr)   super_propertiesenable_exception_autocapture"exception_autocapture_integrationsexception_captureprivacy_modeosgetcwd	Exceptionproject_rootpersonal_api_keyloggingbasicConfiglogsetLevelDEBUGWARNINGr
   	consumersatexitregisterjoinranger	   appendstart)selfr    r"   r-   max_queue_sizer.   r#   r$   r%   r&   max_retriesr/   r(   threadr5   rF   project_api_keyr;   r<   r)   r6   r=   r>   r?   rE   rA   nconsumers                               C/var/www/openai/venv/lib/python3.12/site-packages/posthog/client.py__init__zClient.__init__$   s   8 [[0
 '1'	4<<6 
	",)$/		!$(!"&*5Z23B=RU3V0 *$8! 0,H)2T/!%($!yy{ ) !1 !HHgmm,HHgoo.,,%5dIpIp%qD"!DN 		*6]!##JJLL%%#1'#)= %%h/ NN$% #;  $#$s   I& &I54I5c                     |xs i }|xs i }t        d|t               t        d|t               ||||d|d}| j                  ||      S )Ndistinct_id
propertiesz	$identify	timestampcontextr^   $seteventuuidr,   ID_TYPESdict_enqueuerT   r^   r_   rb   ra   re   r<   msgs           r[   identifyzClient.identify   s[    %2
-R{H5j$/ #& 
 }}S-00    c                 6    | j                  |||||      }|d   S )NfeatureFlags
get_deciderT   r^   groupsperson_propertiesgroup_propertiesr<   	resp_datas          r[   get_feature_variantszClient.get_feature_variants   s(     OOK9JL\^kl	((rm   c                 6    | j                  |||||      }|d   S )NfeatureFlagPayloadsrp   rr   s          r[   get_feature_payloadszClient.get_feature_payloads   s)     OOK9JL\^kl	.//rm   c                 B    | j                  |||||      }|d   |d   dS )Nro   ry   ro   ry   rp   rr   s          r[   get_feature_flags_and_payloadsz%Client.get_feature_flags_and_payloads   s8     OOK9JL\^kl	%n5#,-B#C
 	
rm   c                     t        d|t               || j                  }|rt        d|t               ni }|||||d}t	        | j
                  | j                  fd| j                  i|}|S )Nr^   rs   )r^   rs   rt   ru   r<   r(   )r,   rg   r<   rh   r   r    r"   r6   )rT   r^   rs   rt   ru   r<   request_datarv   s           r[   rq   zClient.get_decide   sx    {H5  ..MHfd+F '!2 0*
 4<<wD<f<fwjvw	rm   c
                    |xs i }|xs i }t        d|t               t        d|t               t        d|t               ||||||d}
|rt        d|t               ||
d   d<   i }i }|r	 | j	                  |||	      }n%| j                  r| j                  ||xs i |	d	
      }|j                         D ]  \  }}||d| <    |j                         D cg c]  \  }}|dus| }}}|r||d<   |ri ||
d   |
d<   | j                  |
|	      S # t
        $ r(}| j                  j                  d|        Y d }~d }~ww xY wc c}}w )Nr^   r_   rd   )r_   ra   rb   r^   rd   re   rs   z$groups)r<   z0[FEATURE FLAGS] Unable to get feature variants: T)rs   r<   only_evaluate_locally	$feature/Fz$active_feature_flags)r,   rg   rh   r   rw   rD   rI   	exceptionr1   get_all_flagsitemsri   )rT   r^   rd   r_   rb   ra   re   rs   send_feature_flagsr<   rk   extra_propertiesfeature_variantsefeaturevariantkeyvalueactive_feature_flagss                      r[   capturezClient.capture   s     %2
-R{H5j$/- %"&
 Hfd++1Ci([#'#<#<[&`m#<#n  #11V\r-gk  2   !1 6 6 8GW6=y	23 !9 9I8N8N8Pg8PeTYafTf8Pg8L45 I#3 Is<7H IC}}S-00'  [""%UVWUX#YZZ[  hs$   +D E%E	ED??Ec                     |xs i }|xs i }t        d|t               t        d|t               ||||d|d}| j                  ||      S )Nr^   r_   rc   r`   rf   rj   s           r[   r9   z
Client.set
  s[    %2
-R{H5j$/ #&
 }}S-00rm   c                     |xs i }|xs i }t        d|t               t        d|t               ||||d|d}| j                  ||      S )Nr^   r_   	$set_once)ra   rb   r^   r   rd   re   rf   rj   s           r[   set_oncezClient.set_once  s[    %2
-R{H5j$/ #&# 
 }}S-00rm   c	                 
   |xs i }|xs i }t        d|t               t        d|t               t        d|t               |rt        d|t               ndj                  ||      }d|||d||||d}	| j	                  |	|      S )	N
group_type	group_keyr_   r^   z${}_{}z$groupidentify)z$group_type
$group_keyz
$group_set)rd   r_   r^   ra   rb   re   )r,   rg   rh   formatri   )
rT   r   r   r_   rb   ra   re   r<   r^   rk   s
             r[   group_identifyzClient.group_identify,  s      %2
-Rj(3Y1j$/M;9"//*i@K &)'(
 '"
 }}S-00rm   c                     |xs i }t        d|t               t        d|t               ||d||d|d}| j                  ||      S )Nprevious_idr^   )r^   aliasz$create_alias)r_   ra   rb   rd   r^   )r,   rg   ri   )rT   r   r^   rb   ra   re   r<   rk   s           r[   r   zClient.aliasQ  sX    -R{H5{H5  +$ #$&	
 }}S-00rm   c                     |xs i }|xs i }t        d|t               t        d|t               t        d|t               ||d<   d|||||d}| j	                  ||      S )Nr^   r_   urlz$current_urlz	$pageview)rd   r_   ra   rb   r^   re   )r,   rg   rh   r   ri   )	rT   r^   r   r_   rb   ra   re   r<   rk   s	            r[   pagezClient.paged  ss      %2
-R{H5j$/sL)%(
>" !$"&
 }}S-00rm   c           	         	 |xs i }|d|d<   t               }t        d|t               t        d|t               |t	        |      }nt        j                         }||dk(  r| j                  j                  d       y t        |      }	t        dd|	ii| j                  	      }
|
d   d   }|d
   j                  d      |d
   j                  d      |t        | j                         d| j                   d| d|}| j!                  |d|||||      S # t"        $ r(}| j                  j%                  d|        Y d }~y d }~ww xY w)NFz$process_person_profiler^   r_   )NNNz"No exception information availabler   values)rE   r   typer   z	/project/z/person/)z$exception_typez$exception_messagez$exception_listz$exception_personURLz
$exceptionzFailed to capture exception: )r   r,   rg   rh   r   sysexc_inforI   warningr   r   rE   r   r   r0   r    r   rD   r   )rT   r   r^   r_   rb   ra   re   rs   r   all_exceptions_with_tracerd   $all_exceptions_with_trace_and_in_appr   s                r[   capture_exceptionzClient.capture_exception{  s   -	D#)rJ "8=
45#gM;9L*d3$.y9<<>8/A#A  !EF )DH(M% " ";"
 "..E 493Eh3O0 $H#J#N#Nv#V&J1&M&Q&QRY&Z#G+@+O*PPYZ^ZfZfYggop{o|(}	
 J <<\:wPY[_aghh 	DHH!>qcBCC	Ds   A=D  BD 	E EEc                    | j                   ry|d   }|t        j                  t                     }t	        d|t               t	        d|d   t
               t        |      }|j                         |d<   d|v r!|j                  d      }|rt        |      |d<   |j                  d      si |d<   d|d   d	<   t        |d   d
<   || j                  }|rd|d   d<   | j                  ri |d   | j                  |d<   t        |j                  dd            |d<   t        |      }| j                  j!                  d|       | j"                  sd|fS | j$                  rg| j                  j!                  d|d          t'        | j(                  | j*                  | j,                  | j.                  |g| j0                         d|fS 	 | j2                  j5                  |d       | j                  j!                  d|d          d|fS # t2        j6                  $ r" | j                  j9                  d       d|fcY S w xY w)z8Push a new `msg` onto the queue, return `(success, msg)`)Fr;   ra   Ntzrb   re   r_   zposthog-pythonz$libz$lib_versionTz$geoip_disabler^   zqueueing: %szenqueued with blocking %s.rd   )r&   r(   batchr)   F)blockzenqueued %s.zanalytics-python queue is full)r;   r   nowr   r,   rh   r   	isoformatpopstringify_idr   r   r<   r=   r   rI   r-   r.   r/   r   r    r"   r&   r(   r)   r*   putFullr   )rT   rk   r<   ra   re   s        r[   ri   zClient._enqueue  s    ==$$	 0IY1	3y>40 #9-	$..0K S=776?D*40Fww|$ "C$4L&!,3L.)  ..M26C./   N3|#4 N8M8M NC)#''-*FGMCj~s+ yy9>>HHNN7WF		YYe%)%>%> 9	JJNN3eN,HHNN>3w<89zz 	HH=>#:	s   ?H 2H=<H=c                     | j                   } |j                         } |j                          | j                  j	                  d|       y)z4Forces a flush from the internal queue to the serverz$successfully flushed about %s items.N)r*   qsizerP   rI   r-   )rT   r*   sizes      r[   flushzClient.flush  s6    

u{{}

=tDrm   c                     | j                   D ]#  }|j                          	 |j                          % | j                  r| j                  j                          yy# t        $ r Y Yw xY w)zbEnds the consumer thread once the queue is empty.
        Blocks execution until finished
        N)rM   pauserP   RuntimeErrorr7   stop)rT   rZ   s     r[   rP   zClient.join  s\     HNN ' ;;KK 	   s   A	A'&A'c                     | j                          | j                          | j                  r| j                  j                          yy)z2Flush all messages and cleanly shutdown the clientN)r   rP   r@   closerT   s    r[   shutdownzClient.shutdown  s4    

		!!""((* "rm   c                    	 t        | j                  d| j                   d| j                  d      }|d   xs g | _        | j                  D ci c]  }|j                  d      |d   | c}| _        |d   xs i | _        |d   xs i | _        t!        j"                  t%                     | _        y c c}w # t        $ rk}|j                  d	k(  r4| j                  j                  d
       | j                  r+t        d	d      | j                  j                  d|        Y d }~d }~wt        $ rM}| j                  j                  d| j                  z         | j                  j                  |       Y d }~d }~ww xY w)Nz*/api/feature_flag/local_evaluation/?token=z&send_cohorts
   )r(   flagsr   r3   r4   i  z[FEATURE FLAGS] Error loading feature flags: To use feature flags, please set a valid personal_api_key. More information: https://posthog.com/docs/api/overviewzYou are using a write-only key with feature flags. To use feature flags, please set a personal_api_key More information: https://posthog.com/docs/api/overview)statusmessagez-[FEATURE FLAGS] Error loading feature flags: z`[FEATURE FLAGS] Fetching feature flags failed with following error. We will retry in %s seconds.r   )r   rF   r    r"   r1   r2   r3   r4   r   r   rI   errorr-   rD   r   r5   r   r   r   _last_feature_flag_poll)rT   responseflagr   s       r[   _load_feature_flagszClient._load_feature_flags  sr   "	 %%<T\\N-X			H "*'!2!8bD.2.@.@).@dDHHUOD_UT!.@)D% '//C&D&JD##I.4"DL. (0||uw'?$7)  	Txx3 v ::""!R  !NqcRS 	 HHr$$% HHQ	 s>   AB; B6&B6.$B; 6B; ;	FA!D**F6AE>>Fc                 d   | j                   s#| j                  j                  d       g | _        y | j	                          | j
                  r| j
                  j                         sKt        t        | j                        | j                        | _        | j
                  j                          y y )NzL[FEATURE FLAGS] You have to specify a personal_api_key to use feature flags.)seconds)intervalexecute)rF   rI   r   r1   r   r7   is_aliver   r   r5   rS   r   s    r[   load_feature_flagszClient.load_feature_flags?  s    $$HHkl!#D  " 4 4 6 )D<N<N*OY]YqYqrDKKK !7rm   rs   rt   ru   warn_on_unknown_groupsc                L   |j                  dd      rt        d      |j                  d      sy|j                  d      xs i }|j                  d      }|| j                  j                  t        |            }	|	s/| j                  j                  d| d|d	           t        d
      |	|vrH|r#| j                  j                  d|d	    d       y| j                  j                  d|d	    d       y||	   }
t        |||	   |
      S t        |||| j                        S )Nensure_experience_continuityFz&Flag has experience continuity enabledactivefiltersaggregation_group_type_indexz)[FEATURE FLAGS] Unknown group type index z for feature flag r   z!Flag has unknown group type indexz2[FEATURE FLAGS] Can't compute group feature flag: z without group names passed in)	r   r   r3   strrI   r   r-   r   r4   )rT   feature_flagr^   rs   rt   ru   r   flag_filtersr   
group_namefocused_group_propertiess              r[   _compute_flag_locallyzClient._compute_flag_locallyJ  sj    :EB()QRR)#''	28b'3'7'78V'W$'30044S9U5VWJ  ?@\?]]op|  ~C  qD  pE  F --PQQ' *HH$$L\Z_M`Laa  A  HHNNL\Z_M`Laa  A '7
'C$0vj?QSkll0{L]_c_k_kllrm   rs   rt   ru   r   send_feature_flag_eventsr<   c          
      P    | j                  ||||||||      }	|	y t        |	      S )Nr   )get_feature_flagbool)
rT   r   r^   rs   rt   ru   r   r   r<   r   s
             r[   feature_enabledzClient.feature_enabledx  sF     ((/-"7%=' ) 	
 H~rm   c                j   t        d|t               t        d|t               t        d|t               | j                  ry | j                  ||||      \  }}| j                  | j                  r| j                          d }	| j                  rR| j                  D ]C  }
|
d   |k(  s	 | j                  |
||||      }	| j                  j                  d| d|	        E |	d u}|sO|sM	 | j                  |||||
      }|j!                  |      }	|	d}	| j                  j                  d| d|	        | dt#        |	       }|| j$                  |   vrA|r?| j'                  |dd|d|	d|d| |	i||       | j$                  |   j)                  |       |	S # t        $ r,}| j                  j                  d| d|        Y d }~/d }~wt        $ r)}| j                  j                  d	|        Y d }~_d }~ww xY w# t        $ r(}| j                  j                  d|        Y d }~d }~ww xY w)Nr   r^   rs   rs   rt   ru   z$Successfully computed flag locally: z -> zFailed to compute flag z
 locally: z7[FEATURE FLAGS] Error while computing variant locally: rs   rt   ru   r<   Fz&Successfully computed flag remotely: #z -> #z-[FEATURE FLAGS] Unable to get flag remotely: _$feature_flag_called$feature_flag$feature_flag_responselocally_evaluatedr   rs   r<   )r,   r   rg   rh   r;   &_add_local_person_and_group_propertiesr1   rF   r   r   rI   r-   r   rD   r   rw   r   r   r:   r   add)rT   r   r^   rs   rt   ru   r   r   r<   r   r   r   flag_was_locally_evaluatedr1   feature_flag_reported_keys                  r[   r   zClient.get_feature_flag  s    	sL){H5&$'==.2.Y.Y!24D/
++ %$*?*?##% **;#%!#'#=#= '#).?-= $> $ )McURVW_V`'ab +$ &.T%9")2GX $ 9 9!&7%5"/ !: ! ),,S1#$H!GuERZQ[\] (+e1S]O$<!%T-U-UVa-bb(LL&#S,h')Cu%x	 +   44[AEEF_`U 2 !)@ZPQs'ST $ !**-defdg+hi !$  X""%RSTRU#VWWXs=   '7F)AH 	G>"!G		G>G99G>	H2
H--H2)match_valuers   rt   ru   r   r   r<   c                t   | j                   ry || j                  |||||dd|	      }d }
d }|| j                  ||      }|d u}|sY|sW	 | j                  |||||	      }|d   j	                  |d       }
|d   j	                  t        |      j                         d       }| dt        |
       }|| j                  |   vrC|rA| j                  |dd	|d
|
d|d|d| |
i||	       | j                  |   j                  |       |S # t        $ r(}| j                  j                  d|        Y d }~d }~ww xY w)NFT)rs   rt   ru   r   r   r<   ro   ry   :[FEATURE FLAGS] Unable to get feature flags and payloads: r   r   r   r   z$feature_flag_payloadr   r   r   )r;   r   _compute_payload_locallyr}   r   r   lowerrD   rI   r   r:   r   r   )rT   r   r^   r   rs   rt   ru   r   r   r<   r   payloadr   responses_and_payloadsr   r   s                   r[   get_feature_flag_payloadzClient.get_feature_flag_payload  s    ==//"3!1). '++ 0 K "33CEG%,D%8")2Ge)-)L)L):<Lm*& 2.AEEc4P01FGKKCPSHNNL\^bc (+e1S]O$<! &T-U-UVa-bb(LL&#S,h+W')Cu%x +   44[AEEF_`1  e""%_`a_b#cddes   
AD 	D7D22D7c                 
   d }| j                   |S | j                   j                  |      xs i }|j                  d      xs i }|j                  d      xs i }|j                  t        |      j                         d       }|S )Nr   payloads)r2   r   r   r   )rT   r   r   r   flag_definitionr   flag_payloadss          r[   r   zClient._compute_payload_locally-  s    $$,N3377<B&**95;$((4:##C$4$:$:$<dCrm   rs   rt   ru   r   r<   c                :    | j                  ||||||      }|d   S )Nr   ro   )get_all_flags_and_payloads)rT   r^   rs   rt   ru   r   r<   r   s           r[   r   zClient.get_all_flags9  s8     ///-"7' 0 
 ^$$rm   c                :   | j                   rd d dS | j                  ||||      \  }}| j                  ||||      \  }}}	||d}
|	r|s	 | j                  |||||      }|}
|
S |
S # t        $ r)}| j
                  j                  d|        Y d }~|
S d }~ww xY w)Nr|   r   r   r   )r;   r   #_get_all_flags_and_payloads_locallyrq   rD   rI   r   )rT   r^   rs   rt   ru   r   r<   r   r   fallback_to_decider   flags_and_payloadsr   s                r[   r   z!Client.get_all_flags_and_payloadsM  s     ==$(FF.2.Y.Y!24D/
++ /3.V.V:K^n /W /
+x+ %*(K&;
e%)__!&7%5"/ &5 &" . x  e""%_`a_b#cddes   A( (	B1BBc          	         t        d|t               t        d|t               | j                  | j                  r| j                          i }i }d}| j                  rU| j                  D ]E  }		 | j                  |	|||||      ||	d   <   | j                  |	d   ||	d            }
|
r|
||	d   <   G nd}|||fS # t        $ r d}Y ]t        $ r*}| j                  j                  d|        d}Y d }~d }~ww xY w)Nr^   rs   Fr   r   Tz;[FEATURE FLAGS] Error while computing variant and payload: )r,   rg   rh   r1   rF   r   r   r   r   rD   rI   r   )rT   r^   rs   rt   ru   r   r   r   r  r   matched_payloadr   s               r[   r   z*Client._get_all_flags_and_payloads_locallyr  s*    	{H5&$'%$*?*?##%"**.)-)C)C#%*;)9/E *D *E$u+& '+&C&CDKQVW[\aWbQc&dO&0?e- +( "&h 222 . .)-&  .HH&&)defdg'hi)-&.s   -AB99C8C8 C33C8c                     | j                   S N)r1   r   s    r[   feature_flag_definitionszClient.feature_flag_definitions  s    !!!rm   c                 r    d|i|xs i }i }|r&|D ]!  }d||   i|j                  |      xs i ||<   # ||fS )Nr^   r   )r   )rT   r^   rs   rt   ru   all_person_propertiesall_group_propertiesr   s           r[   r   z-Client._add_local_person_and_group_properties  si    !. Y@Q@WUW Y!$
 &"44'++J7=24$Z0 % %&:::rm   )NNFi'  TNd   g      ?F   F         NNFTFr  NFNNF)NNNNNN)NNNN)	NNNNNNNFN)NNNNNNNN)NNNNNNN)$__name__
__module____qualname____doc__rG   	getLoggerrI   r\   rl   rw   rz   r}   rq   r   r9   r   r   r   r   r   ri   r   rP   r   r   r   r   r   r   r   r   r   r   r   r  r    rm   r[   r   r      s   &
'

I
&C "./%*+/5o%b1$ fj) fj0 fj
0  71r1"1& #1J1( sw12 9DvAFE+%@N	   #,mf #!%@ #!%Rr #!%DL
  #%0 ##L &(2PRkp$3L";rm   r   c                 X    t        ||      sdj                  | ||      }t        |      y)z8Require that the named `field` has the right `data_type`z{0} must have {1}, got: {2}N)
isinstancer   AssertionError)namefield	data_typerk   s       r[   r,   r,     s0    eY'+224EJS!! (rm   c                 B    | y t        | t              r| S t        |       S r  )r  r   r   )vals    r[   r   r     s"    
{#|$
s8Orm   )3rN   rG   numbersrB   r   r   r   re   r   r   dateutil.tzr   sixr   posthog.consumerr	   posthog.exception_capturer
   posthog.exception_utilsr   r   r   posthog.feature_flagsr   r   posthog.pollerr   posthog.requestr   r   r   r   r   r   posthog.utilsr   r   r   r   posthog.versionr   r*   ImportErrorr+   Numberrg   r8   objectr   r,   r   r  rm   r[   <module>r,     s       	 
 (    % 6 c c W ! b b W W #
 NNL$/G;V G;T"s  s   8B 	B+*B+