o
    3i                     @   sF  d dl Z 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 d dlmZmZ d dl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZ zd dlmZ W n eya   dZY nw dZg dZd	gZ d
Z!dZ"dZ#dZ$e%dZ&dZ'G dd dZ(ed Z)edi deed eee*ef  f de*dee*ee*e+f f de*dee, de*deee*ef  de*deed eee*ef  f de)de*d e*d!ee*e*f d"ee* d#ed$ d%e+d&e*ee*e+f e*eee*e+f  ee*e+f eee* eed eee*ef  f ee e*ed' ee*e+f ee*e+f d(d)d*Z-ed+d,d,Z.e/d-Z0d.Z1d/d0 Z2d1d2 Z3dd3d4Z4G d5d6 d6Z5e
rSed7Z6ee5e6f Z7d8d9 Z8d:d; Z9d<d=d>e:fd?d@Z;dAdB Z<			ddCdDZ=	ddEdFZ>dGdH Z?dIdJ Z@dKdL ZA		ddMdNZBdOdP ZCdQdR ZD				ddSdTZEeFeGdUZHeHrdVdW ZIndXdW ZI		 	 	ddYdZZJ	dd[d\ZKd]d^ ZLd_d` ZMdadb ZNddcddZOddedfZPdgdh ZQdidj ZRdkdl ZSdmdn ZTdodp ZUdqdr ZVdsdt ZWdudv ZXdwdx ZYddydzZZd{d| Z[d}d~ Z\dd Z]dddZ^dddZ_dd Z`	dddZadd Zbdd ZcdS )    N)datetime)	FrameTypeTracebackType)TYPE_CHECKINGAnyDictIteratorListLiteralOptionalPatternSetTuple	TypedDictTypeVarUnioncast)ExceptionArgExcInfo)BaseExceptionGroup   )z(?i)passwordz
(?i)secretz
(?i)passwdz(?i)pwdz(?i)api_keyz
(?i)apikeyz(?i)authz(?i)credentialsz(?i)privatekeyz(?i)private_keyz	(?i)tokenz(?i)aws_access_key_idz	(?i)_passz(?i)sk_z(?i)jwtz^__.*z-$$_posthog_redacted_based_on_masking_rules_$$z$$_posthog_value_too_long_$$i  d   z\.^$*+?{}[]|()i P  c                   @   s0   e Zd ZefddZdd Zdd Zdd Zd	S )
VariableSizeLimiterc                 C   s   || _ d| _d S )Nr   max_sizecurrent_size)selfr    r   e/lsinfo/ai/hellotax_ai/llm_service/venv_embed/lib/python3.10/site-packages/posthog/exception_utils.py__init__L   s   
zVariableSizeLimiter.__init__c                 C   s   | j | | jkS N)r   r   r   sizer   r   r   can_addP   s   zVariableSizeLimiter.can_addc                 C   s   |  j |7  _ d S r    )r   r!   r   r   r   addS   s   zVariableSizeLimiter.addc                 C   s   | j | j S r    r   )r   r   r   r   get_remaining_spaceV   s   z'VariableSizeLimiter.get_remaining_spaceN)__name__
__module____qualname__"DEFAULT_TOTAL_VARIABLES_SIZE_LIMITr   r#   r$   r%   r   r   r   r   r   K   s
    r   )fatalcriticalerrorwarninginfodebugEventbreadcrumbsvaluescheck_in_idcontextsdistdurationenvironmenterrorsevent_id	exceptionlevelloggermessagemodulesmonitor_slugplatformpythonprofilerelease)check_intransaction)requestserver_namespans
stacktracestart_timestampstatusthreads	timestamprE   typeuser_metrics_summaryF)totali     z^[a-zA-Z0-9/+=]*$z
[Filtered]c                 C   s   | t   S r    )epochtotal_secondsvaluer   r   r   to_timestamp      rW   c                 C   s
   |  dS )Nz%Y-%m-%dT%H:%M:%S.%fZ)strftimerU   r   r   r   format_timestamp   s   
rZ   c                 C   s2   | du r	t  } nt| } | d du rd} d| iS )z+Creates a hint with the exc info filled in.Nr   exc_info)sysr[   exc_info_from_errorr[   r   r   r   event_hint_with_exc_info   s   
r_   c                   @   sH   e Zd ZdZdZdd Zdd Zedd Zed	d
 Z	edd Z
dS )AnnotatedValuezA
    Meta information for a data field in the event payload.
    rV   metadatac                 C   s   || _ || _d S r    ra   )r   rV   rb   r   r   r   r      s   
zAnnotatedValue.__init__c                 C   s&   t |tsdS | j|jko| j|jkS )NF)
isinstancer`   rV   rb   )r   otherr   r   r   __eq__   s   
zAnnotatedValue.__eq__c                 C      t ddddggidS )zxThe value was removed because it could not be parsed. This is done for request body values that are not json nor a form. remz!rawxra   r`   clsr   r   r   removed_because_raw_data      z'AnnotatedValue.removed_because_raw_datac                 C   rf   )zThe actual value was removed because the size of the field exceeded the configured maximum size (specified with the max_request_body_size sdk option)rg   rh   !configri   ra   rj   rk   r   r   r   removed_because_over_size_limit   rn   z.AnnotatedValue.removed_because_over_size_limitc                 C   s   t tdddggidS )zHThe actual value was removed because it contained sensitive information.rh   ro   sra   )r`   SENSITIVE_DATA_SUBSTITUTErk   r   r   r   +substituted_because_contains_sensitive_data   rn   z:AnnotatedValue.substituted_because_contains_sensitive_dataN)r&   r'   r(   __doc__	__slots__r   re   classmethodrm   rp   rs   r   r   r   r   r`      s    

r`   Tc                 C   s   t | dd pt | dd S )Nr(   r&   getattrrk   r   r   r   get_type_name   s   rz   c                 C   s   t | dd }|dvr|S d S )Nr'   )Nbuiltins__builtins__rx   )rl   modr   r   r   get_type_module   s   r~   framer   returnc              	   C   sl   z| j d }|drW dS W n ttfy   Y nw dD ]}z| j| r)W  dS W q ty3   Y qw dS )Nr&   zsentry_sdk.T)__traceback_hide____tracebackhide__F)	f_globals
startswithAttributeErrorKeyErrorf_locals	Exception)r   r}   	flag_namer   r   r   should_hide_frame  s"   


r   c                 c   s4    | }|d urt |js|V  |j}|d usd S d S r    )r   tb_frametb_next)tbtb_r   r   r   iter_stacks  s   
r   c              	      s6  d}d }|d ur*t |dr*z||}W n ttfy!   d }Y nw |d ur*| }|d u rFzt| }W n ttfyE   g d g f Y S w |sMg d g fS td|| }t	|d | t
|}	z- fdd||| D }
t|| d d} fd	d||d |	 D }|
||fW S  ty   g d g f Y S w )
N   
get_sourcer   rR   c                       g | ]}t |d  dqS 

max_lengthstrip_stringstrip.0liner   r   r   
<listcomp>A      z'get_lines_from_file.<locals>.<listcomp>r   r   c                    r   r   r   r   r   r   r   r   F  r   )hasattrr   ImportErrorIOError
splitlines	linecachegetlinesOSErrormaxminlenr   r   
IndexError)filenamelinenor   loadermodulecontext_linessource
source_strlower_boundupper_boundpre_contextcontext_linepost_contextr   r   r   get_lines_from_file"  s@   



r   c                 C   s   z| j j}W n ty   d }Y nw z| jd }W n ty'   g d g f Y S w z| jd }W n ty:   d }Y nw |d }|d urN|rNt|||||dS g d g fS )Nr&   
__loader__rR   )r   r   )f_codeco_filenamer   r   r   )r   	tb_linenomax_value_lengthabs_pathr   r   r   r   r   r   get_source_contextP  s*   

r   c                 C   s&   zt | W S  ty   t|  Y S w r    )strr   	safe_reprrU   r   r   r   safe_strj  s
   
r   c                 C   s    zt | W S  ty   Y dS w )Nz<broken repr>)reprr   rU   r   r   r   r   r  s
   
r   c                 C   s   |r| s|S z=| dr|d d }| ddd }|| kr%tj|W S tj| j}|s0|W S ||tj	dd dd 
tj	W S  tyN   | Y S w )Nz.pyc.rR   r      )endswithsplitospathbasenamer\   r>   __file__rsplitseplstripr   )r   r   base_modulebase_module_pathr   r   r   filename_for_modulez  s"   
r   c                 C   s   t | dd }|sd }d }n| jj}| jj}z| jd }W n ty'   d }Y nw |d u r/| j}dt||p6d |r>tj	
|nd |pBd||d}t| ||\|d< |d< |d< |S )	Nr   r&   rA   z	<unknown>)r@   r   r   functionr   r   r   r   r   )ry   r   r   co_namer   r   f_linenor   r   r   abspathr   )r   r   r   r   r   r   r   rvr   r   r   serialize_frame  s0   	r   c                 C   s   t | dd S )Nerrnorx   )	exc_valuer   r   r   	get_errno  rX   r   c                 C   s$   t | ddpt | ddp| }t|S )Nr=   rg   detail)ry   r   )r   r=   r   r   r   get_error_message  s   
r   c                    sB  i }|r|  nddd|d< |dur||d d< |dur"t|}nd}|dur8|d di di d	| |durB||d d
< |dk}	|	sX|durX||d d< d|d d< |	rfd|d vrfd|d d< tduont|t}
|
rwd|d d< t| |d< t| |d< t||d< t  fddt	|D }|r|dd|d< |S )zJ
    Creates a dict that goes into the events `exception.values` list
    genericT)rN   handled	mechanismNexception_idmetar   numberr   r   	parent_idchainedrN   is_exception_groupr   rV   c                    s   g | ]}t |j|j d qS ))r   r   )r   r   r   )r   r   r   r   r   r     s    z5single_exception_from_error_tuple.<locals>.<listcomp>raw)framesrN   rI   )
copyr   
setdefaultr   rc   r~   rz   r   DEFAULT_MAX_VALUE_LENGTHr   )exc_typer   r   r   r   r   r   exception_valuer   is_root_exceptionr   r   r   r   r   !single_exception_from_error_tuple  sH   



	r   __suppress_context__c                 c   s    | \}}}g }t  }|d urW|d urYt||vr[|||fV  || |t| |jr2|j}n|j}|d u r;d S t|}|}t|dd }|d ur]|d ur_t||vsd S d S d S d S d S d S )N__traceback__)	setidappendr$   r   	__cause____context__rN   ry   )r[   r   r   r   seen_exceptionsseen_exception_idscauser   r   r   walk_exception_chain  s4   

r   c                 c   s    | V  d S r    r   r^   r   r   r   r   /  s   
c              
   C   s@  t | ||||||d}|g}|}|d7 }t|do|j}	|	rG|o)t|do)|jdu}
|
rF|j}tt||t|dd||dd\}}|| n(|oRt|doR|jdu}|ro|j}tt||t|dd||dd\}}|| |out|d	}|rt	|j
D ]\}}tt||t|dd|||d
| d\}}|| q}||fS )zx
    Creates the list of exceptions.
    This can include chained exceptions and exceptions from an ExceptionGroup.
    )r   r   r   r   r   r   r   rR   r   r   Nr   )r   r   r   r   r   r   r   
exceptionszexceptions[%s])r   r   r   r   exceptions_from_errorrN   ry   extendr   	enumerater   )r   r   r   r   r   r   r   parentr   should_supress_contextexception_has_causer   child_exceptionsexception_has_contentcontextr   idxer   r   r   r   4  s|   	







	r   c                 C   sr   | \}}}t d uot|t }|rt||||ddd\}}ng }t| D ]\}}}|t|||| q#|  |S )Nr   )r   r   r   r   r   r   )r   rc   r   r   r   r   reverse)r[   r   r   r   r   r   _r   r   r   r   exceptions_from_error_tuple  s(   


r  c                 C   s.   zt | W S  ty   t| dd  Y S w )NrR   r   )r   UnicodeDecodeErrorr   rU   r   r   r   	to_string  s
   
r
  c                 c   s    d| v r
| d V  d| v r#| d  dpdD ]}d|v r"|d V  qd| v r<| d  dp/dD ]}d|v r;|d V  q0d S d S )NrI   rL   r2   r   r:   )get)eventthreadr:   r   r   r   iter_event_stacktraces  s   


r  c                 c   s.    t | D ]}|dpdD ]}|V  qqd S )Nr   r   )r  r  )r  rI   r   r   r   r   iter_event_frames  s   r  c                 C   s(   t | D ]}t|d|||d q| S )Nr   )in_app_excludein_app_includeproject_root)r  set_in_app_in_framesr  )r  r  r  r  rI   r   r   r   handle_in_app  s   r  c                 C   s   | sd S | D ]B}| d}|d urq| d}t||r!d|d< qt||r+d|d< q| d}|d u r5qt|r>d|d< qt||rHd|d< qq| S )Nin_appr   TFr   )r  _module_in_list_is_external_source_is_in_project_root)r   r  r  r  r   current_in_appr   r   r   r   r   r    s0   





r  c                 C   sH   t | tr
t| dS t | tr"t| dkr"| d d uo!t| d dS dS )N__posthog_exception_capturedrR   F)rc   BaseExceptionr   tupler   )r,   r   r   r   exception_is_already_captured   s   

r  c                 C   sx   t | trt| dd t| d| d S t | tr6t| dkr8| d d ur:t| d dd t| d d| d S d S d S d S )Nr  T__posthog_exception_uuidrR   )rc   r  setattrr  r   )r,   uuidr   r   r   mark_exception_as_captured  s   
r!  c                 C   s   t | trt| dkr| \}}}nBt | trKzt|  W n	 ty%   Y nw t| dd }|d ur7t| }| }nt	 \}}}|| urJd }| }t| }nt
dt|  |||f}tr_tt|}|S )N   r   z,Expected Exception object to report, got %s!)rc   r  r   r  construct_artificial_tracebackr   ry   rN   r\   r[   
ValueErrorr   r   r   )r,   r   r   r   r[   r   r   r   r]     s.   


r]   c                 C   s   t | dd d ur
d S d}g }	 zt|}|d7 }W n	 ty#   Y nw || q|  d }|D ]}t|||j|j	}q2t
| d| d S )Nr   r   TrR   )ry   r\   	_getframer$  r   r  typesr   f_lastir   r  )r  depthr   r   r   r   r   r   r#  <  s$   

	r#  c                 C   s>   | d u rdS |s
dS |D ]}|| ks|  |d r dS qdS )NFr   Tr   )nameitemsitemr   r   r   r  U  s   r  c                 C   s   t d| d u}|S )Nz [\\/](?:dist|site)-packages[\\/])research)r   external_sourcer   r   r   r  d  s   r  c                 C   s   |d u rdS |  |rdS dS NFTr)  )r   r  r   r   r   r  m  s
   
r  c                 C   s(   |  dd|d  jddd}|d S )zd
    Truncate a UTF-8-encodable string to the last full codepoint so that it fits in max_bytes.
    utf-8Nr"  ignore)r8   ...)encodedecode)string	max_bytes	truncatedr   r   r   _truncate_by_bytesy  s    r9  c              	   C   s*   zt | dW S  ttfy   Y d S w )Nr1  )r   r4  UnicodeEncodeErrorr	  rU   r   r   r   _get_size_in_bytes  s
   r;  c                 C   s   | s| S |d u r
t }t| }t| }|d ur ||kr t| |}n|d ur3||kr3| d |d  d }n| S t||p:|dd|d |ggddS )Nr"  r3  z!limitri   )r   rh   ra   )r   r;  r   r9  r`   )rV   r   	byte_size	text_sizetruncated_valuer   r   r   r     s"   r   c                 C   sF   t d| }|s
d S | | d  }|rtdd |D rd S | S )Nz^\(\?[aiLmsux]*i[aiLmsux]*\)c                 s   s    | ]}|t v V  qd S r    )_REGEX_METACHARACTERS)r   cr   r   r   	<genexpr>  s    z+_extract_plain_substring.<locals>.<genexpr>)r-  matchendanylower)patterninline_flags	remainderr   r   r   _extract_plain_substring  s   rI  c              	   C   sp   | sd S g }g }| D ]#}t |}|d ur|| q
z
|t| W q
 ty-   Y q
w |s4|s4d S ||fS r    )rI  r   r-  compiler   )patterns
substringsregexesrF  simpler   r   r   _compile_patterns  s    rO  c                 C   sV   |d u rdS |\}}|r|   }|D ]	}||v r dS q|D ]
}|| r( dS qdS r0  )rE  r.  )r*  rK  rL  rM  
name_lowerrq   rF  r   r   r   _pattern_matches  s   
rQ  c           	         s6  s| S t | tttfr" d u rt  t| }| v rdS  | t | trdt| tkr/t	S i }| 
 D ],\}}t |tsBt|n|}t|tkrOt	||< q5t|rYt||< q5t| ||< q5|S t | ttfrt| tkrst	S  fdd| D }t| |S t | trt| tkrt	S t| rtS | S | S )Nz<circular ref>c                    s   g | ]}t | qS r   )_mask_sensitive_data)r   r,  _seencompiled_maskr   r   r     s    z(_mask_sensitive_data.<locals>.<listcomp>)rc   dictlistr  r   r   r$   r   _MAX_COLLECTION_ITEMS_TO_SCANCODE_VARIABLES_TOO_LONG_VALUEr+  r   #_MAX_VALUE_LENGTH_FOR_PATTERN_MATCHrQ  CODE_VARIABLES_REDACTED_VALUErR  rN   )	rV   rU  rT  obj_idresultkvkey_strmasked_itemsr   rS  r   rR    sF   






rR  c           	      C   s  zw| d u rd}nLt | trt| }nBt | ttfr/tt| }||s'W d S || | W S t | trJt| tkr=t	}n|rGt
| |rGt}n| }n
t| |}t|}t||krd|d |d  d }t|}||spW d S || |W S  ty   z+t| }t||kr|d |d  d }t|}||sW Y d S || |W  Y S  ty   z#dt| j d}t|}||sW Y Y d S || |W  Y  Y S  ty   d}t|}||sY Y Y d S || | Y  Y  Y S w w w )NNoner"  r3  <>z<unserializable object>)rc   boolr   intfloatr   r#   r$   rZ  rY  rQ  r[  rR  jsondumpsr   r   rN   r&   )	rV   limiterr   rU  r]  result_sizemasked_valuefallbackfallback_sizer   r   r   _serialize_variable_value   sl   

















ro  c                 C   s   t | td ttttfS r    )rc   rN   re  rf  rg  r   rU   r   r   r   _is_simple_type<  s   rp  c                 C   s2  |d u rg }|d u rg }t |}t |}z| j }W n ty&   i  Y S w i }i }	| D ]\}
}t|
|r9q/t|rB|||
< q/||	|
< q/i }i ||	}tt|	 tt|		  }|D ]5}
||
 }t|
|rt
}t|}||sz |S || |||
< qat||||}|d u r |S |||
< qa|S r    )rO  r   r   r   r+  rQ  rp  rW  sortedkeysr[  r   r#   r$   ro  )r   rj  mask_patternsignore_patternsr   rU  compiled_ignore
local_varssimple_varscomplex_varsr*  rV   r]  all_varsordered_namesredacted_valueredacted_size
serializedr   r   r   serialize_code_variables@  sP   


 




r~  c                 C   s*   z
t | ||| W d S  ty   Y d S w r    )attach_code_variables_to_framesr   )all_exceptionsr[   rs  rt  r   r   r   #try_attach_code_variables_to_framesv  s   
r  c              	   C   s   |\}}}|d u rd S t t|}|sd S t }| D ]2}	|	d}
|
r'd|
vr(q|
d }t||D ]\}}|ds;q1t|j|||dd}|rK||d< q1qd S )NrI   r   r  r   )rs  rt  r   code_variables)rW  r   r   r  zipr~  r   )r  r[   rs  rt  r   r   	traceback	tb_framesrj  r:   rI   serialized_framesserialized_frametb_item	variablesr   r   r   r    s6   


r  r    )NNN)NN)NNNN)Nr   r   N)r   N)NNr   )drh  r   r   r-  r\   r&  r   r   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   posthog.argsr   r   r{   r   r   r   $DEFAULT_CODE_VARIABLES_MASK_PATTERNS&DEFAULT_CODE_VARIABLES_IGNORE_PATTERNSr[  rY  rZ  rX  	frozensetr?  r)   r   LogLevelStrr   objectrg  r0   rS   rJ  BASE64_ALPHABETrr   rW   rZ   r_   r`   rw   	Annotatedrz   r~   re  r   r   r   r   r   r   r   r   r   r   r   r   r   HAS_CHAINED_EXCEPTIONSr   r   r  r
  r  r  r  r  r  r!  r]   r#  r  r  r  r9  r;  r   rI  rO  rQ  rR  ro  rp  r~  r  r  r   r   r   r   <module>   s6  @	



17

D
1

%

D
 	
\
!

'!	



*<
6