
    g/m                     &   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 	 d dlmZ dZ
er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 eeee   eee   f   ed   f   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 !      Z" ed"d#d#      Z# ejH                  d$      Z%d%Z&d& Z'd' Z(dOd(Z) G d) d*      Z*er ed+      Z+ee*e+f   Z,d, Z-d- Z.d.d/d0e/fd1Z0d2 Z1	 	 	 dd3Z2	 dOd4Z3d5 Z4d6 Z5d7 Z6	 	 	 	 	 dPd8Z7	 	 	 dQd9Z8d: Z9d; Z:	 	 	 	 	 dRd<Z; e<e=d=      Z>e>rd> Z?nd? Z?	 	 	 	 	 dSd@Z@	 	 dTdAZAdB ZBdC ZCdD ZDddEZEdOdFZFdG ZG	 	 dTdHZHdI ZIdJ ZJdK ZKdL ZLdM ZMdOdNZNy# e	$ r dZY w xY w)U    N)datetime)TYPE_CHECKING)BaseExceptionGroupi   )	FrameTypeTracebackType)AnyCallableDictIteratorListLiteralOptionalSetTupleType	TypedDictTypeVarUnioncast)NNN)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	timestampr1   typeuser_metrics_summaryF)totali     z^[a-zA-Z0-9/+=]*$z
[Filtered]c                 0    | t         z
  j                         S N)epochtotal_secondsvalues    L/var/www/openai/venv/lib/python3.12/site-packages/posthog/exception_utils.pyto_timestamprF   h   s    EM((**    c                 $    | j                  d      S )Nz%Y-%m-%dT%H:%M:%S.%fZ)strftimerC   s    rE   format_timestamprJ   m   s    >>122rG   c                 \    | t        j                         } nt        |       } | d   d} d| iS )z+Creates a hint with the exc info filled in.Nr   exc_info)sysrL   exc_info_from_errorrL   s    rE   event_hint_with_exc_inforP   r   s9     <<>&x0{!!rG   c                   P    e Zd ZdZdZd Zd Zed        Zed        Z	ed        Z
y)	AnnotatedValuea  
    Meta information for a data field in the event payload.
    This is to tell Relay that we have tampered with the fields value.
    See:
    https://github.com/getsentry/relay/blob/be12cd49a0f06ea932ed9b9f93a655de5d6ad6d1/relay-general/src/types/meta.rs#L407-L423
    rD   metadatac                      || _         || _        y r@   rS   )selfrD   rT   s      rE   __init__zAnnotatedValue.__init__   s    
 rG   c                     t        |t              sy| j                  |j                  k(  xr | j                  |j                  k(  S )NF)
isinstancerR   rD   rT   )rV   others     rE   __eq__zAnnotatedValue.__eq__   s4    %0zzU[[(LT]]enn-LLrG   c                 &    t        ddddggi      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xrS   rR   clss    rE   removed_because_raw_dataz'AnnotatedValue.removed_because_raw_data   s,     

 
	
rG   c                 &    t        ddddggi      S )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)r]   r^   !configr_   rS   r`   ra   s    rE   removed_because_over_size_limitz.AnnotatedValue.removed_because_over_size_limit   s,     !

 
	
rG   c                 .    t        t        dddggi      S )zHThe actual value was removed because it contained sensitive information.r^   re   srS   )rR   SENSITIVE_DATA_SUBSTITUTEra   s    rE   +substituted_because_contains_sensitive_dataz:AnnotatedValue.substituted_because_contains_sensitive_data   s,     +!

 
	
rG   N)__name__
__module____qualname____doc__	__slots__rW   r[   classmethodrc   rf   rj    rG   rE   rR   rR   ~   sU     &I!
M 
 
 
 
 
 
rG   rR   Tc                 :    t        | dd       xs t        | dd       S )Nrm   rk   getattrra   s    rE   get_type_namerv      s    3-Oj$1OOrG   c                 *    t        | dd       }|dvr|S y )Nrl   )Nbuiltins__builtins__rt   )rb   mods     rE   get_type_moduler{      s!    
#|T
*C
44
rG   framer   returnc                     	 | j                   d   }|j                  d      ry	 dD ]  }	 | j                  |   r y y# t        t        f$ r Y +w xY w# t
        $ r Y 8w xY w)Nrk   zsentry_sdk.T)__traceback_hide____tracebackhide__F)	f_globals
startswithAttributeErrorKeyErrorf_locals	Exception)r|   rz   	flag_names      rE   should_hide_framer      s    ooj)>>-( )
 ?		~~i( ) ?  H%   		s     > AAA	AAc              #   f   K   | }|)t        |j                        s| |j                  }|(y y wr@   )r   tb_frametb_next)tbtb_s     rE   iter_stacksr      s1     
C
/ .Ikk /s   ,11c                    d}d }|0t        |d      r$	 |j                  |      }||j	                         }|	 t        j                  |       }|sg d g fS t        d||z
        }t        |dz   |z   t        |            }		 ||| D 
cg c]  }
t        |
j                  d      |        }}
t        ||   j                  d      |      }||dz   |	 D 
cg c]  }
t        |
j                  d      |        }}
|||fS # t        t        f$ r d }Y w xY w# t        t        f$ r g d g fcY S w xY wc c}
w c c}
w # t        $ r g d g fcY S w xY w)N   
get_sourcer   r>   z
)
max_length)hasattrr   ImportErrorIOError
splitlines	linecachegetlinesOSErrormaxminlenstrip_stringstrip
IndexError)filenamelinenor   loadermodulecontext_linessource
source_strlower_boundupper_boundlinepre_contextcontext_linepost_contexts                 rE   get_lines_from_filer      s    MFgfl;	**62J !**,F~	 ''1F 4|a-/0Kfqj=0#f+>K
[abmnt[uv[uSW|DJJv$6:N[uv#F6N$8$8$@ZX 
k:
: F+
C: 	 
 L,661 W% 	J	 ! 	 tR<	  w

  4|sR   D  D D; #D1++D; #D69D;  DDD.-D.1
D; ;EEc                    	 | j                   j                  }	 | j                  d   }	 | j                  d   }|dz
  }||rt	        |||||      S g d g fS # t        $ r d }Y Kw xY w# t        $ r g d g fcY S w xY w# t        $ r d }Y Pw xY w)Nrk   
__loader__r>   )r   r   )f_codeco_filenamer   r   r   )r|   	tb_linenomax_value_lengthabs_pathr   r   r   s          rE   get_source_contextr     s    <<++,. ]Fh"8V5Ef]cddtR<    4|  s3   A A' A; A$#A$'A87A8;B	B	c                 N    	 t        |       S # t        $ r t        |       cY S w xY wr@   )strr   	safe_reprrC   s    rE   safe_strr   5  s+     5z   s   
 $$c                 8    	 t        |       S # t        $ r Y yw xY w)Nz<broken repr>)reprr   rC   s    rE   r   r   =  s#    E{ s   
 	c                    |r| s|S 	 |j                  d      r|d d }| j                  dd      d   }|| k(  rt        j                  j	                  |      S t
        j                  |   j                  }|s|S |j                  |j                  t        j                  d      d   d      d   j                  t        j                        S # t        $ r |cY S w xY w)Nz.pyc.r>   r      )endswithsplitospathbasenamerM   r*   __file__rsplitseplstripr   )r   r   base_modulebase_module_paths       rE   filename_for_moduler   E  s    6V$}Hll3*1-& 77##H--;;{3<<O~~.55bffa@CQGKRRSUSYSYZZ s   AC  C 8AC CCc                    t        | dd       }|sd }d }n,| j                  j                  }| j                  j                  }	 | j                  d   }	|| j                  }dt        |	|      xs d |rt        j                  j                  |      nd |xs d|	|d}
|rt        | ||      \  |
d<   |
d<   |
d<   |r	 |
S # t
        $ r d }	Y xw xY w)	Nr   rk   r-   z	<unknown>)r,   r   r   functionr   r   r   r   r   )ru   r   r   co_namer   r   f_linenor   r   r   abspathr   )r|   r   include_local_variablesinclude_source_contextr   custom_reprr   r   r   r   rvs              rE   serialize_framer   [  s     UHd+F<<++<<'', NN	 '9AT19BGGOOH-t+
B DV9.E
A=2n-r./A  	I;  s   B< <C
	C
c                     d}g }t        j                         }|8t        |      s|j                  t	        || ||             |j
                  }|8|j                          |ddS )NT)r   r   r   rawframesr:   )rM   	_getframer   appendr   f_backreverse)r   r   r   r   r   fs         rE   current_stacktracer     sp     FA
- #MM,C+A%5	 HH - NNe,,rG   c                     t        | dd       S )Nerrnort   	exc_values    rE   	get_errnor     s    9gt,,rG   c                 T    t        | dd      xs t        | dd      xs t        |       S )Nr)   r]   detail)ru   r   r   s    rE   get_error_messager     s+    9i,g	8R0PgT\]fTggrG   c                    i }|r|j                         nddd|d<   |||d   d<   |t        |      }	nd}	|	5|d   j                  di       j                  di       j                  d	|	       |||d   d
<   |dk(  }
|
s|||d   d<   d|d   d<   |
rd|d   vrd|d   d<   t        duxr t	        |t              }|rd|d   d<   t        |       |d<   t        |       |d<   t        |      |d<   |d}d}t        }d}n |d   }|d   }|d   }|j                  d      }t        |      D cg c]'  }t        |j                  |j                  ||||      ) }}|r|dd|d<   |S c c}w )z
    Creates a dict that goes into the events `exception.values` list and is ingestible by Sentry.

    See the Exception Interface documentation for more details:
    https://develop.sentry.dev/sdk/event-payloads/exception/
    genericT)r:   handled	mechanismNexception_idmetar   numberr   r   	parent_idchainedr:   is_exception_groupr   rD   r   r   r   r   )r   r   r   r   r   r   r   r5   )copyr   
setdefaultr   rY   r{   rv   r   DEFAULT_MAX_VALUE_LENGTHgetr   r   r   r   )exc_typer   r   client_optionsr   r   r   r   exception_valuer   is_root_exceptionr   r   r   r   r   r   s                    rE   !single_exception_from_error_tupler     s   " O7@9>>#3yeiFjOK 7C$^4)$$//;FFwPRS^^_gino17$X.$)!64=$[1/8$V,V?;+GG/8$V,+47eJyRd<e=A$%9: / 9OH+H5OF0;OG"&!%3"01J"K!/0H!I)*<=$((7 b/
 "B 	KKll$;#9-#	
 "  
 395(I%
s   ,,E&__suppress_context__c              #   h  K   | \  }}}g }t               }||t        |      |vr|||f |j                  |       |j                  t        |             |j                  r|j
                  }n|j                  }|y t        |      }|}t        |dd       }||t        |      |vry y y y y y w)N__traceback__)	setidr   addr   	__cause____context__r:   ru   )rL   r   r   r   seen_exceptionsseen_exception_idscauses          rE   walk_exception_chainr    s     "*)R U"y'<IVhAhIr))
 ""9-""2i=1--!++!--}E{HI6B# "y'<IVhAh'<"Ah'<"s   B)B2,B2c              #      K   |  y wr@   rq   rO   s    rE   r  r     s     s   c                    t        | |||||||      }|g}	|}|dz  }t        |d      xr |j                  }
|
ri|xr t        |d      xr |j                  du}|r|j                  }t	        t        |      |t        |dd      |||d      \  }}|	j                  |       nh|xr t        |d      xr |j                  du}|rF|j                  }t	        t        |      |t        |dd      |||d      \  }}|	j                  |       |xr t        |d	      }|r[t        |j                        D ]C  \  }}t	        t        |      |t        |dd      ||||d
|z        \  }}|	j                  |       E ||	fS )z
    Creates the list of exceptions.
    This can include chained exceptions and exceptions from an ExceptionGroup.

    See the Exception Interface documentation for more details:
    https://develop.sentry.dev/sdk/event-payloads/exception/
    )r   r   r   r   r   r   r   r   r>   r   r  Nr   )r   r   r   r   r   r   r   r  
exceptionszexceptions[%s])r   r   r   r  exceptions_from_errorr:   ru   extendr  	enumerater	  )r   r   r   r   r   r   r   r   parentr	  should_supress_contextexception_has_causer  child_exceptionsexception_has_contentcontextr   idxes                      rE   r
  r
  %  s   & /%!	F JIAL$Y0FGjILjLj (oGI{,KoPYPcPckoPo''E/De5/48-#)"0,\+ ./
 !* ugi.O uT]TiTiquTu ++G/Dg!7OT:-#)$0,\+ ./ #Gwy,'G	 4 45FC/Da1ot4-#)#'#-	0,\+ ./ 6 *%%rG   c           
          | \  }}}t         d uxr t        |t               }|rt        |||||dd      \  }}n4g }t        |       D ]$  \  }}}|j	                  t        |||||             & |j                          |S )Nr   )r   r   r   r   r   r   r   )r   rY   r
  r  r   r   r   )	rL   r   r   r   r   r   r   _r	  s	            rE   exceptions_from_error_tupler  }  s     'Hi+47eJyRd<e/)
J 
';H'E#Hi?)UWYgirst (F rG   c                 T    	 t        |       S # t        $ r t        |       dd cY S w xY w)Nr>   r   )r   UnicodeDecodeErrorr   rC   s    rE   	to_stringr    s1    !5z !E{1R  !s   
 ''c              #      K   d| v r| d    d| v r)| d   j                  d      xs dD ]  }d|v s|d     d| v r*| d   j                  d      xs dD ]  }d|v s|d     y y w)Nr5   r8   r   rq   r&   )r   )eventthreadr&   s      rE   iter_event_stacktracesr    s     uL!!EI&**84::Fv%\** ; e{+//9?R?Iy(-- @ s   /A*,A*A*c              #   h   K   t        |       D ]   }|j                  d      xs dD ]  }|  " y w)Nr   rq   )r  r   )r  r5   r|   s      rE   iter_event_framesr     s5     ,U3
^^H-33EK 4 4s   02c                 b    t        |       D ]   }t        |j                  d      |||       " | S )Nr   )in_app_excludein_app_includeproject_root)r  set_in_app_in_framesr   )r  r"  r#  r$  r5   s        rE   handle_in_appr&    s5    ,U3
NN8$))%		
 4 LrG   c                    | sy | D ]  }|j                  d      }||j                  d      }t        ||      rd|d<   :t        ||      rd|d<   L|j                  d      }|`t        |      rd|d<   qt        ||      s~d|d<    | 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   s           rE   r%  r%    s    8,%8$ 6>2"E(O 6>2#E(O 99Z(x(#E(Ox6"E(O; > MrG   c                 f   t        | t              rt        |       dk(  r| \  }}}npt        | t              rIt	        | dd       }|t        |       }| }nCt        j                         \  }}}|| ur'd }| }t        |       }nt        dt        |       z        |||f}t        rt        t        |      }|S )N   r   z,Expected Exception object to report, got %s!)rY   tupler   BaseExceptionru   r:   rM   rL   
ValueErrorr   r   ExcInfo)r   r   r   r   rL   s        rE   rN   rN     s    %CJ!O"')R	E=	)UOT2>E{HI&)lln#Hi%!	; G$u+UVV)R(H *OrG   c                 V    t        |       } t        |       }ddt        | ||      id|fS )Nr   r   )r'   r&   )rN   rP   r  )rL   r   r   hints       rE   event_from_exceptionr5  
  sD     #8,H#H-D "$?.Zc$de	
 	 rG   c                 T    | y|sy|D ]  }|| k(  s| j                  |dz         s y y)NFr   Tr   )nameitemsitems      rE   r)  r)    s8    |4<4??4#:6  rG   c                 6    t        j                  d|       d u}|S )Nz [\\/](?:dist|site)-packages[\\/])research)r   external_sources     rE   r*  r*  *  s!     ii CXNVZZOrG   c                 .    |y| j                  |      ryy)NFTr7  )r   r$  s     rE   r+  r+  1  s!     <(rG   c                 \    | j                  d      d|dz
   j                  dd      }|dz   S )zd
    Truncate a UTF-8-encodable string to the last full codepoint so that it fits in max_bytes.
    utf-8Nr.  ignore)r$   ...)encodedecode)string	max_bytes	truncateds      rE   _truncate_by_bytesrI  =  s8    
 g&Q7>>wx>XIurG   c                 b    	 t        | j                  d            S # t        t        f$ r Y y w xY w)NrA  )r   rD  UnicodeEncodeErrorr  rC   s    rE   _get_size_in_bytesrL  G  s3    5<<()) 23 s    ..c                     | s| S |t         }t        |       }t        |       }|||kD  rt        | |      }n|||kD  r| d |dz
   dz   }n| S t	        ||xs |dd|dz
  |ggd      S )Nr.  rC  z!limitr_   )r   r^   rS   )r   rL  r   rI  rR   )rD   r   	byte_size	text_sizetruncated_values        rE   r   r   O  s    -
"5)IE
IZ!7,UJ?		9z#9 0*q.1E9)	sJNJ?@
 rG   r@   )NTTNN)TTN)NNNNN)NNr   r   N)NN)Or   r   r<  rM   r   typingr   rx   r   r   r   typesr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r0  r2  LogLevelStrr   objectfloatr   rA   compileBASE64_ALPHABETri   rF   rJ   rP   rR   rr   	Annotatedrv   r{   boolr   r   r   r   r   r   r   r   r   r   r   r   r   r   HAS_CHAINED_EXCEPTIONSr  r
  r  r  r  r   r&  r%  rN   r5  r)  r*  r+  rI  rL  r   rq   rG   rE   <module>r[     s  
  	 	 
   +    .   " d=!=(=2IIJ	!G RSK(	
4 14S#X3G GH(	
3(	
 S$sF{"334(	
 C	(	

 (	
 3(	
 d4S>*(	
 (	
 gh/d38n1EEF(	
 [(	
 c(	
  s!(	
" tCH~#(	
& HSM'(	
( ))(	
* v+(	
, s-(	
. CK($sF{+,sF{+'sm GH-tDcN/CCD!(+56f% $S&[ 1O(	
R W,E^ 	q! "**12( +
3
	"D
 D
N Ana'(IP
[ T $ (\ 0 0  /f !-6-
h K\ !,BC 78 U&t >!.
$N> "	A  s   H HH