
    uIg                     \   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 | _         |	 tC        jD                         }|| _$        || _%        |r>tM        jN                          | jP                  jS                  tL        jT                         n)| jP                  jS                  tL        jV                         | j<                  rtY        | | j>                        | _         |rd | _-        y |rt]        j^                  | j`                         tc        |      D ]j  }g | _-        te        | j                   | j                  | j                  ||||	|
||
      }| jZ                  jg                  |       |s[|ji                          l y # tF        $ r d }Y Qw xY w)Napi_key)integrations)hoston_errorflush_atflush_intervalgzipretriestimeouthistorical_migration)5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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   rE   project_api_keyr;   r<   r)   r6   r=   r>   r?   rD   nconsumers                              K/var/www/html/answerous/venv/lib/python3.12/site-packages/posthog/client.py__init__zClient.__init__$   s   6 [[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 I.-I.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rS   r]   r^   ra   r`   rd   r<   msgs           rZ   identifyzClient.identify   s[    %2
-R{H5j$/ #& 
 }}S-00    c                 6    | j                  |||||      }|d   S )NfeatureFlags
get_deciderS   r]   groupsperson_propertiesgroup_propertiesr<   	resp_datas          rZ   get_feature_variantszClient.get_feature_variants   s(     OOK9JL\^kl	((rl   c                 6    | j                  |||||      }|d   S )NfeatureFlagPayloadsro   rq   s          rZ   get_feature_payloadszClient.get_feature_payloads   s)     OOK9JL\^kl	.//rl   c                 B    | j                  |||||      }|d   |d   dS )Nrn   rx   rn   rx   ro   rq   s          rZ   get_feature_flags_and_payloadsz%Client.get_feature_flags_and_payloads   s8     OOK9JL\^kl	%n5#,-B#C
 	
rl   c                     t        d|t               || j                  }|rt        d|t               ni }|||||d}t	        | j
                  | j                  fd| j                  i|}|S )Nr]   rr   )r]   rr   rs   rt   r<   r(   )r,   rf   r<   rg   r   r    r"   r6   )rS   r]   rr   rs   rt   r<   request_dataru   s           rZ   rp   zClient.get_decide   sx    {H5  ..MHfd+F '!2 0*
 4<<wD<f<fwjvw	rl   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^   rc   )r^   r`   ra   r]   rc   rd   rr   z$groups)r<   z0[FEATURE FLAGS] Unable to get feature variants: T)rr   r<   only_evaluate_locally	$feature/Fz$active_feature_flags)r,   rf   rg   r   rv   rC   rH   	exceptionr1   get_all_flagsitemsrh   )rS   r]   rc   r^   ra   r`   rd   rr   send_feature_flagsr<   rj   extra_propertiesfeature_variantsefeaturevariantkeyvalueactive_feature_flagss                      rZ   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	> 9I8N8N8PgeTYafTfg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^   rb   r_   re   ri   s           rZ   r9   z
Client.set  s[    %2
-R{H5j$/ #&
 }}S-00rl   c                     |xs i }|xs i }t        d|t               t        d|t               ||||d|d}| j                  ||      S )Nr]   r^   	$set_once)r`   ra   r]   r   rc   rd   re   ri   s           rZ   set_oncezClient.set_once  s[    %2
-R{H5j$/ #&# 
 }}S-00rl   c                     |xs i }|xs i }t        d|t               t        d|t               t        d|t               d|||ddj                  ||      |||d}| j	                  ||      S )N
group_type	group_keyr^   z$groupidentify)z$group_type
$group_keyz
$group_setz${}_{})rc   r^   r]   r`   ra   rd   )r,   rf   rg   formatrh   )	rS   r   r   r^   ra   r`   rd   r<   rj   s	            rZ   group_identifyzClient.group_identify*  s      %2
-Rj(3Y1j$/ &)'(
 $??:yA"
 }}S-00rl   c                     |xs i }t        d|t               t        d|t               ||d||d|d}| j                  ||      S )Nprevious_idr]   )r]   aliasz$create_alias)r^   r`   ra   rc   r]   )r,   rf   rh   )rS   r   r]   ra   r`   rd   r<   rj   s           rZ   r   zClient.aliasI  sX    -R{H5{H5  +$ #$&	
 }}S-00rl   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)rc   r^   r`   ra   r]   rd   )r,   rf   rg   r   rh   )	rS   r]   r   r^   ra   r`   rd   r<   rj   s	            rZ   pagezClient.page\  ss      %2
-R{H5j$/sL)%(
>" !$"&
 }}S-00rl   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)rD   r   typer   z	/project/z/person/)z$exception_typez$exception_messagez$exception_listz$exception_personURLz
$exceptionzFailed to capture exception: )r   r,   rf   rg   r   sysexc_inforH   warningr   r   rD   r   r   r0   r    r   rC   r   )rS   r   r]   r^   ra   r`   rd   rr   r   all_exceptions_with_tracerc   $all_exceptions_with_trace_and_in_appr   s                rZ   capture_exceptionzClient.capture_exceptions  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;   r`   Ntzra   rd   r^   zposthog-pythonz$libz$lib_versionTz$geoip_disabler]   zqueueing: %szenqueued with blocking %s.rc   )r&   r(   batchr)   F)blockzenqueued %s.zanalytics-python queue is full)r;   r   nowr   r,   rg   r   	isoformatpopstringify_idr   r   r<   r=   r   rH   r-   r.   r/   r   r    r"   r&   r(   r)   r*   putFullr   )rS   rj   r<   r`   rd   s        rZ   rh   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*   qsizerO   rH   r-   )rS   r*   sizes      rZ   flushzClient.flush  s6    

u{{}

=tDrl   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)rL   pauserO   RuntimeErrorr7   stop)rS   rY   s     rZ   rO   zClient.join  sa      	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   rO   r@   closerS   s    rZ   shutdownzClient.shutdown  s4    

		!!""((* "rl   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   rE   r    r"   r1   r2   r3   r4   r   r   rH   errorr-   rC   r   r5   r   r   r   _last_feature_flag_poll)rS   responseflagr   s       rZ   _load_feature_flagszClient._load_feature_flags  sm   "	 %%<T\\N-X			H "*'!2!8bD.2.@.@)&*DHHUOD_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)rE   rH   r   r1   r   r7   is_aliver   r   r5   rR   r   s    rZ   load_feature_flagszClient.load_feature_flags7  s    $$HHkl!#D  " 4 4 6 )D<N<N*OY]YqYqrDKKK !7rl   rr   rs   rt   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   strrH   r   r-   r   r4   )rS   feature_flagr]   rr   rs   rt   r   flag_filtersr   
group_namefocused_group_propertiess              rZ   _compute_flag_locallyzClient._compute_flag_locallyB  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lrl   rr   rs   rt   r   send_feature_flag_eventsr<   c          
      P    | j                  ||||||||      }	|	y t        |	      S )Nr   )get_feature_flagbool)
rS   r   r]   rr   rs   rt   r   r   r<   r   s
             rZ   feature_enabledzClient.feature_enabledp  sF     ((/-"7%=' ) 	
 H~rl   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]   rr   rr   rs   rt   z$Successfully computed flag locally: z -> zFailed to compute flag z
 locally: z7[FEATURE FLAGS] Error while computing variant locally: rr   rs   rt   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   rr   r<   )r,   r   rf   rg   r;   &_add_local_person_and_group_propertiesr1   rE   r   r   rH   r-   r   rC   r   rv   r   r   r:   r   add)rS   r   r]   rr   rs   rt   r   r   r<   r   r   r   flag_was_locally_evaluatedr1   feature_flag_reported_keys                  rZ   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_valuerr   rs   rt   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)rr   rs   rt   r   r   r<   rn   rx   :[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   lowerrC   rH   r   r:   r   r   )rS   r   r]   r   rr   rs   rt   r   r   r<   r   payloadr   responses_and_payloadsr   r   s                   rZ   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   )rS   r   r   r   flag_definitionr   flag_payloadss          rZ   r   zClient._compute_payload_locally%  s    $$,N3377<B&**95;$((4:##C$4$:$:$<dCrl   rr   rs   rt   r   r<   c                :    | j                  ||||||      }|d   S )Nr   rn   )get_all_flags_and_payloads)rS   r]   rr   rs   rt   r   r<   r   s           rZ   r   zClient.get_all_flags1  s8     ///-"7' 0 
 ^$$rl   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_locallyrp   rC   rH   r   )rS   r]   rr   rs   rt   r   r<   r   r   fallback_to_decider   flags_and_payloadsr   s                rZ   r   z!Client.get_all_flags_and_payloadsE  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]   rr   Fr   r   Tz;[FEATURE FLAGS] Error while computing variant and payload: )r,   rf   rg   r1   rE   r   r   r   r   rC   rH   r   )rS   r]   rr   rs   rt   r   r   r   r   r   matched_payloadr   s               rZ   r   z*Client._get_all_flags_and_payloads_locallyj  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    rZ   feature_flag_definitionszClient.feature_flag_definitions  s    !!!rl   c                 r    d|i|xs i }i }|r&|D ]!  }d||   i|j                  |      xs i ||<   # ||fS )Nr]   r   )r   )rS   r]   rr   rs   rt   all_person_propertiesall_group_propertiesr   s           rZ   r   z-Client._add_local_person_and_group_properties  sn    !. Y@Q@WUW Y!$ 
 &"44'++J7=24$Z0 %&:::rl   )NNFi'  TNd   g      ?F   F         NNFTFr  NFNN)NNNNNN)NNNN)	NNNNNNNFN)NNNNNNN)$__name__
__module____qualname____doc__rF   	getLoggerrH   r[   rk   rv   ry   r|   rp   r   r9   r   r   r   r   r   rh   r   rO   r   r   r   r   r   r   r   r   r   r   r   r  r    rl   rZ   r   r      s   &
'

I
&C "./%*+/3m%^1$ fj) fj0 fj
0  71r1"1& 1>1( sw12 9DvAFE+%@N	   #,mf #!%@ #!%Rr #!%DL
  #%0 ##L &(2PRkp$3L";rl   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_typerj   s       rZ   r,   r,     s0    eY'+224EJS!! (rl   c                 B    | y t        | t              r| S t        |       S r  )r  r   r   )vals    rZ   r   r     s"    
{#|$
s8Orl   )3rM   rF   numbersrA   r   r   r   rd   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+   Numberrf   r8   objectr   r,   r   r  rl   rZ   <module>r+     s       	 
 (    % 6 c c W ! b b W W #
 NNL$/;V ;D"c  s   8B 	B+*B+