
    gh3                     v   S SK r S SKrS SKJrJrJr  S SKJr  S SKJrJ	r	J
r
JrJrJr  S SKJr  \(       a]  S SKJr  S SKJr  S SKJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  S SKJr  S SKJr  \\\4   r\\\\\4   /\\\4   4   r\\\4   r \\!\"\#4r$Sr%Sr&Sr'Sr(/ r)S r*\\/r+S r, " S S5      r-S r.g)    N)MappingSequenceSet)datetime)AnnotatedValuecapture_internal_exceptiondisable_capture_eventformat_timestamp	safe_reprstrip_string)TYPE_CHECKING)TracebackType)Any)Callable)ContextManager)Dict)List)Optional)Type)Union)NotImplementedTypei@B    
   z<cyclic>c                 .    [         R                  U 5        g N)global_repr_processorsappend)	processors    X/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sentry_sdk/serializer.pyadd_global_repr_processorr    =   s    !!),    c                 .    [         R                  U 5        g r   )sequence_typesr   )tys    r   add_repr_sequence_typer%   E   s    "r!   c                   0    \ rS rSrSrS rS rS rS rSr	g)MemoJ   _ids_objsc                      0 U l         / U l        g r   r)   )selfs    r   __init__Memo.__init__M   s    	
r!   c                 <    U R                   R                  U5        U $ r   )r+   r   r-   objs     r   memoizeMemo.memoizeR   s    

#r!   c                     U R                   S   n[        U5      U R                  ;   a  gXR                  [        U5      '   g)NTF)r+   idr*   r1   s     r   	__enter__Memo.__enter__W   s5    jjnc7dii!$IIbgr!   c                 ~    U R                   R                  [        U R                  R                  5       5      S 5        g r   )r*   popr7   r+   )r-   r$   valuetbs       r   __exit__Memo.__exit__`   s&     			b)*D1r!   N)
__name__
__module____qualname____firstlineno__	__slots__r.   r3   r8   r>   __static_attributes__ r!   r   r'   r'   J   s    !I

2r!   r'   c                 P  ^^^^^^^	^
^^^^^^ [        5       m/ m/ mUR                  SS5      S:H  mUR                  SS5      mUR                  SS5      mUR                  SS5      m
U
4S jmUU4S	 jmUUU4S
 jmU4S jm      SU	UUU4S jjmU4S jmUUUUUUUUUUU4S jm	[        R                  " S5         T" U 40 UD6nT(       d$  T(       a  [	        U[
        5      (       a  TS   US'   U[        R                  " S5        $ ! [        R                  " S5        f = f)a<  
A very smart serializer that takes a dict and emits a json-friendly dict.
Currently used for serializing the final Event and also prematurely while fetching the stack
local variables for each frame in a stacktrace.

It works internally with 'databags' which are arbitrary data structures like Mapping, Sequence and Set.
The algorithm itself is a recursive graph walk down the data structures it encounters.

It has the following responsibilities:
* Trimming databags and keeping them within MAX_DATABAG_BREADTH and MAX_DATABAG_DEPTH.
* Calling safe_repr() on objects appropriately to keep them informative and readable in the final payload.
* Annotating the payload with the _meta field whenever trimming happens.

:param max_request_body_size: If set to "always", will never trim request bodies.
:param max_value_length: The max length to strip strings to, defaults to sentry_sdk.consts.DEFAULT_MAX_VALUE_LENGTH
:param is_vars: If we're serializing vars early, we want to repr() things that are JSON-serializable to make their type more apparent. For example, it's useful to see the difference between a unicode-string and a bytestring when viewing a stacktrace.
:param custom_repr: A custom repr function that runs before safe_repr on the object to be serialized. If it returns None or throws internally, we will fallback to safe_repr.

max_request_body_sizeNalwaysmax_value_lengthis_varsFcustom_reprc                 ~   >  S nTb  T" U 5      nU=(       d    [        U 5      $ ! [         a    [        U 5      s $ f = fr   )r   	Exception)r<   
repr_valuerL   s     r   _safe_repr_wrapper%serialize.<locals>._safe_repr_wrapper   sG    	$J&(/
15!11 	$U##	$s    $ <<c                  X  > [        T5      [        T5      ::  a[   T[        T5      S-
     nTS   R                  [        U5      0 5      nTR	                  U5        [        T5      [        T5      ::  a  M[  TS   R                  S0 5      R                  U 5        g ! [         a    0 n N^f = f)N   r6    )len
setdefaultstr
IndexErrorr   update)metasegmentnode
meta_stackpaths      r   	_annotateserialize.<locals>._annotate   s    *oT*s:23!"~00WrB d# *oT* 	2!!"b)006  s   /B B)(B)c                     >  T(       a  gT" 5       n U S;   a  U $ TS   nUS:X  a  TS   S:X  a  TS     gUS:X  a  g g
! [          a     g	f = f)z
A databag is any value that we need to trim.
True for stuff like vars, request bodies, breadcrumbs and extra.

:returns: `True` for "yes", `False` for :"no", `None` for "maybe soon".
T)TNr   breadcrumbsrS   values   extraNFrX   )is_request_bodyp0_is_request_bodyrK   r^   s     r   _is_databagserialize.<locals>._is_databag   sr    	.0O,.&&aB]"tAw(':QW}    		s   = = = = 
A
	A
c                  N   >  T S   S:X  a
  T S   S:X  a  gg! [          a     g f = f)Nr   requestrS   dataTFrf   )r^   s   r   ri   #serialize.<locals>._is_request_body   s;    	Aw)#Q6(9   		s    
$$c           
         > Ub  TR                  U5         T	R                  U 5       nU(       a4  [        sS S S 5        Ub"  TR                  5         T
[	        T5      S-   S 2	 $ $ T" U UUUUUS9sS S S 5        Ub"  TR                  5         T
[	        T5      S-   S 2	 $ $ ! , (       d  f       O= f! [
         at    [        [        R                  " 5       5        U(       a'   Ub"  TR                  5         T
[	        T5      S-   S 2	 gg Ub"  TR                  5         T
[	        T5      S-   S 2	 g g f = f Ub"  TR                  5         T
[	        T5      S-   S 2	 g g ! Ub"  TR                  5         T
[	        T5      S-   S 2	 f f = f)NrS   )
is_databagrg   should_repr_stringsremaining_depthremaining_breadthz=<failed to serialize, use init(debug=True) to see error logs>)	r   r3   CYCLE_MARKERr;   rU   BaseExceptionr   sysexc_info)r2   rq   rg   rr   r[   rt   rs   result_serialize_node_implmemor]   r^   s           r   _serialize_node"serialize.<locals>._serialize_node   s    KK 	0c"f' #"( "
s4y1}/ #! ,)$3(;$3&7	 #"( "
s4y1}/ #) #"  	&s||~6V "
s4y1}/ # "
s4y1}/ #	 #( "
s4y1}/ #w"
s4y1}/ #sW   B. B	B. $
B.	B. 
B+'B. *E +B. ./D,E E +D,,E 'E=c                 n   > [        U [        5      (       a  T" S0 U R                  D6  U R                  n U $ )NrF   )
isinstancer   metadatar<   )r2   r_   s    r   _flatten_annotated%serialize.<locals>._flatten_annotated   s-    c>**%%))C
r!   c                 "  > [        U [        5      (       a  SnUc  TnUc  T" 5       nUc  T" 5       nU(       a7  U(       a  T(       a  [        S5      n[        S5      nOUc  [        nUc  [        nT" U 5      n Ub-  US::  a'  T" SS//S9  U(       a  T" [        T" U 5      TS95      $ g U(       a8  [        (       a-  TUS.n[         H  nU" X5      nU[        Ld  M  T" U5      s  $    [        [        U 5      S	S 5      n	U b   [        U [        [        [        45      (       a\  U(       dK  [        U [        5      (       a>  [        R                  " U 5      (       d  [        R                  " U 5      (       a  T" U 5      $ U $ [        U	5      (       a  U	" U 5      $ [        U [         5      (       a#  U(       d  [#        [%        U 5      5      $ T" U 5      $ [        U [&        5      (       az  [)        U R+                  5       5      n 0 n
SnU R+                  5        HG  u  pUb  X:  a  T" [-        U 5      S
9    U
$ [#        U5      nT" UUUUUUb  US-
  OS US9nXU'   US-  nMI     U
$ [        U [.        5      (       ds  [        U [1        [2        5      5      (       aU  / n[5        U 5       HB  u  pUb  X:  a  T" [-        U 5      S
9    U$ UR7                  T" UUUUUUb  US-
  OS US95        MD     U$ U(       a	  T" U 5      n OY[        U [8        5      (       d  [        U [:        5      (       a  U R=                  SS5      n [        U ["        5      (       d  T" U 5      n [-        T5      S:H  =(       a    TS   S:H  =(       a    TS   S:H  nU(       a  U $ T" [        U TS95      $ )NFinfr   z!limitx)rem)
max_length)r{   rs   __sentry_repr__)rU   rS   )r[   rr   rq   rg   rs   rt   zutf-8replace   spansr6   description)r   r   floatMAX_DATABAG_DEPTHMAX_DATABAG_BREADTHr   r   NotImplementedgetattrtypeboolintmathisinfisnancallabler   rW   r
   r   dictitemsrU   serializable_str_typestupler#   	enumerater   bytes	bytearraydecode)r2   rq   rg   rr   rs   rt   hintsr   ry   sentry_reprrv_dictikvstr_krv_listis_span_descriptionr_   r   rj   ri   rP   r|   rK   keep_request_bodiesrJ   r{   r^   s                    r   rz   'serialize.<locals>._serialize_node_impl   s    c>**"'&")$J".0O#6"',$)%L!"*&7O$,(;% %&?a+?Hc?+,) !3C!8EUV  00!oFE3	"3./-f55 4
 d3i):DA;*S4e*<=="3&&DJJsOOtzz#)#..
k""s##X&& + $S)* (, W%% syy{#CGA		$0Q5K#c(+" N A#!(;)$3/>/J!+PT&7
 "#Q% $( NC!788Z~&>
 >
 G!#$0Q5K#c(+  N # !,?#-(73B3NOa/TX*;
 '& N$S)C#u%%C)C)Cjj)4c3''(- INOtAw'1Od2h-6O 	 J!,s?O"PQQr!   Tr   _meta)NNNNNN)r'   r;   r	   setr   r   )eventkwargsserialized_eventr_   r   rj   ri   rP   r|   rz   rL   rK   r   rJ   r{   r]   r^   s      @@@@@@@@@@@@@@r   	serializer   j   s   * 6DDJ 	

*D1X=  zz"4d;jjE*G**]D1K$7:  $0 $0LJR JR^ d#)*5;F;:*5Et*L*L(21W%!!%(!!%(s   5D D%)/rw   r   collections.abcr   r   r   r   sentry_sdk.utilsr   r   r	   r
   r   r   typingr   typesr   r   r   r   r   r   r   r   r   sentry_sdk._typesr   rW   SpanReprProcessorr   Segmentr   r   
memoryviewr   MAX_EVENT_BYTESr   r   ru   r   r    r#   r%   r'   r   rF   r!   r   <module>r      s    
  2 2   !#%4S>Dc4S>2E:Lc:Q4RRSMCHoG ui<       -
 C
2 2@b)r!   