
    lh3                     l   d dl Z d dlZd dlmZ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 er]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 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 eeef   Zeeeeef   geeef   f   Zeeef   Z ee!e"e#fZ$dZ%dZ&dZ'dZ(g Z)d Z*eegZ+d Z, G d d      Z-d Z.y)    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                 .    t         j                  |        y N)global_repr_processorsappend)	processors    g/var/www/pru.catia.catastroantioquia-mas.com/tasa/lib/python3.12/site-packages/sentry_sdk/serializer.pyadd_global_repr_processorr    =   s    !!),    c                 .    t         j                  |        y r   )sequence_typesr   )tys    r   add_repr_sequence_typer%   E   s    "r!   c                   (    e Zd ZdZd Zd Zd Zd Zy)Memo_ids_objsc                      i | _         g | _        y r   r(   )selfs    r   __init__zMemo.__init__M   s    	
r!   c                 <    | j                   j                  |       | S r   )r*   r   r,   objs     r   memoizezMemo.memoizeR   s    

#r!   c                     | j                   d   }t        |      | j                  v ry|| j                  t        |      <   y)NTF)r*   idr)   r/   s     r   	__enter__zMemo.__enter__W   s7    jjnc7dii!$DIIbgr!   c                 ~    | j                   j                  t        | j                  j                               d        y r   )r)   popr4   r*   )r,   r$   valuetbs       r   __exit__zMemo.__exit__`   s&     			b)*D1r!   N)__name__
__module____qualname__	__slots__r-   r1   r5   r:    r!   r   r'   r'   J   s    !I

2r!   r'   c                   	
 t               g g |j                  dd      dk(  |j                  dd      |j                  dd      |j                  dd      

fdfd	fd
fd	 	 	 	 	 	 d	fd	fdfd	t        j                  d       	  | fi |}srt	        |t
              rd   |d<   |t        j                  d       S # t        j                  d       w xY w)at  
    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                 p    	 d } |       }|xs t        |       S # t        $ r t        |       cY S w xY wr   )r   	Exception)r8   
repr_valuerE   s     r   _safe_repr_wrapperz%serialize.<locals>._safe_repr_wrapper   sG    	$J&(/
15!11 	$U##	$s    55c                  P   t              t              k  rY	 t              dz
     }d   j                  t        |      i       }j	                  |       t              t              k  rYd   j                  di       j                  |        y # t        $ r i }Y [w xY w)N   r3    )len
setdefaultstr
IndexErrorr   update)metasegmentnode
meta_stackpaths      r   	_annotatez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                      	 ry        } | dv r| S d   }|dk(  rd   dk(  rd    y|dk(  ry	 y
# t         $ r Y y	w xY w)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   breadcrumbsrK   values   extraNFrP   )is_request_bodyp0_is_request_bodyrD   rV   s     r   _is_databagzserialize.<locals>._is_databag   sr    	.0O,.&&aB]"tAw(':QW}    		s   3 3 3 3 	??c                  H    	  d   dk(  r	 d   dk(  ryy# t         $ r Y y w xY w)Nr   requestrK   dataTFr]   )rV   s   r   r`   z#serialize.<locals>._is_request_body   s;    	Aw)#Q6(9   		s    	!!c           	         |j                  |       	 	j                  |       5 }|r3t        cd d d        |"j                          
t	              dz   d = S S  | |||||      cd d d        |"j                          
t	              dz   d = S S # 1 sw Y   nxY wnx# t
        $ rl t        t        j                                |r&Y |"j                          
t	              dz   d = yyY |"j                          
t	              dz   d = y y w xY w	 |"j                          
t	              dz   d = y y # |"j                          
t	              dz   d = w w xY w)NrK   )
is_databagr^   should_repr_stringsremaining_depthremaining_breadthz=<failed to serialize, use init(debug=True) to see error logs>)	r   r1   CYCLE_MARKERr7   rM   BaseExceptionr   sysexc_info)r0   rf   r^   rg   rS   ri   rh   result_serialize_node_implmemorU   rV   s           r   _serialize_nodez"serialize.<locals>._serialize_node   s    KK 	0c" f' ( "
s4y1}/ #! ,)$3(;$3&7	 ( "
s4y1}/ #)    	&s||~6V "
s4y1}/ # "
s4y1}/ #	( "
s4y1}/ #w"
s4y1}/ #sQ   B% B	B% B*	B% B!B% $E %(DE 3E DE &E)c                 d    t        | t              r di | j                   | j                  } | S )Nr?   )
isinstancer   metadatar8   )r0   rW   s    r   _flatten_annotatedz%serialize.<locals>._flatten_annotated   s*    c>*%%))C
r!   c                 0   t        | t              rd}|}|        }|        }|r+|rrt        d      }t        d      }n|t        }|t        } |       } |-|dk  r( ddgg       |r t         |                   S y |r1t        r+|d}t        D ]  } || |      }|t        us |      c S  t        t        |       d	d       }	| t        | t        t        t        f      rF|s:t        | t              r2t        j                  |       st        j                  |       r |       S | S t        |	      r |	|       S t        | t               r|st#        t%        |             S  |       S t        | t&              r~t)        | j+                               } i }
d}| j+                         D ]L  \  }}|||k\  r t-        |       
        |
S t#        |      } |||||||dz
  nd |      }||
|<   |dz  }N |
S t        | t.              sqt        | t1        t2                    rXg }t5        |       D ]F  \  }}|||k\  r t-        |       
        |S |j7                   |||||||dz
  nd |             H |S |r	 |       } nJt        | t8              st        | t:              r| j=                  dd      } t        | t"              s |       } t-              dk(  xr d   dk(  xr d   dk(  }|r| S  t        |             S )NFinfr   z!limitx)rem)
max_length)rp   rh   __sentry_repr__)rM   rK   )rS   rg   rf   r^   rh   ri   zutf-8replace   spansr3   description)rs   r   floatMAX_DATABAG_DEPTHMAX_DATABAG_BREADTHr   r   NotImplementedgetattrtypeboolintmathisinfisnancallabler   rO   r
   r   dictitemsrM   serializable_str_typestupler#   	enumerater   bytes	bytearraydecode)r0   rf   r^   rg   rh   ri   hintsr   rn   sentry_reprrv_dictikvstr_krv_listis_span_descriptionrW   ru   ra   r`   rI   rq   rD   keep_request_bodiesrC   rp   rV   s                    r   ro   z'serialize.<locals>._serialize_node_impl   s}    c>*"'&")$J".0O#6"',$)%L!"*&7O$,(;% %&?a+?Hc?+,) !3C!8EUV  0!oFE3 6	"3./-f556
 d3i):DA;*S4e*<="3&DJJsOtzz#)#..
k"s##X& + $S)* (, W% syy{#CGA		 1$0Q:K5K#c(+" N A#!(;)$3/>/J!+PT&7
 "#Q%( NC!78Z~&>
 G!# 1$0Q:K5K#c(+  N # !,?#-(73B3NOa/TX*;
& N$S)C#u%C)Cjj)4c3'(- INOtAw'1Od2h-6O 	 J!,s?O"PQQr!   Tr   _meta)NNNNNN)r'   r7   r	   setrs   r   )eventkwargsserialized_eventrW   ru   ra   r`   rI   rq   ro   rE   rD   r   rC   rp   rU   rV   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(21W%!!%(!!%(s   8&C4 4D)/rl   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   rO   SpanReprProcessorr   Segmentr   r   
memoryviewr   MAX_EVENT_BYTESr   r   rj   r   r    r#   r%   r'   r   r?   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!   