
    `i3                        U 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e*d<   ddZ+eegZ,de*d<   de-ddfdZ. G d d      Z/d dZ0y)!    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>zList[ReprProcessor]global_repr_processorsreturnc                 .    t         j                  |        y N)r   append)	processors    S/opt/aeropuerto/back/api/venv/lib/python3.12/site-packages/sentry_sdk/serializer.pyadd_global_repr_processorr!   =   s    !!),    z
List[type]sequence_typestyc                 .    t         j                  |        y r   )r#   r   )r$   s    r    add_repr_sequence_typer&   D   s    "r"   c                   D    e Zd ZdZddZd	dZdefdZ	 	 	 	 	 	 	 	 d
dZy)Memo_ids_objsr   Nc                      i | _         g | _        y r   r)   )selfs    r    __init__zMemo.__init__K   s    &(	"$
r"   c                 <    | j                   j                  |       | S r   )r+   r   r-   objs     r    memoizezMemo.memoizeO   s    

#r"   c                     | j                   d   }t        |      | j                  v ry|| j                  t        |      <   y)NTF)r+   idr*   r0   s     r    	__enter__zMemo.__enter__S   s7    jjnc7dii!$DIIbgr"   c                 ~    | j                   j                  t        | j                  j                               d        y r   )r*   popr5   r+   )r-   r$   valuetbs       r    __exit__zMemo.__exit__[   s&     			b)*D1r"   )r   N)r1   r   r   zContextManager[bool])r$   zOptional[Type[BaseException]]r9   zOptional[BaseException]r:   zOptional[TracebackType]r   N)	__name__
__module____qualname__	__slots__r.   r2   boolr6   r;    r"   r    r(   r(   H   sH    !I%4 2+2 )2 &	2
 
2r"   r(   c                   	
 t               g g |j                  dd      dk(  |j                  dd      |j                  dd      |j                  dd      dd	d
t        ffddfddfddfddfd	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
fd	dfd	 	 	 	 	 	 	 	 	 	 	 	 	 	 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_reprr9   r   r   c                 p    	 d } |       }|xs t        |       S # t        $ r t        |       cY S w xY wr   )r   	Exception)r9   
repr_valuerG   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   r4    )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   breadcrumbsrM   values   extraNFrR   )is_request_bodyp0_is_request_bodyrF   rX   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   spansr]   dataTFr_   rX   s   r    _is_span_attributez%serialize.<locals>._is_span_attribute   s;    	Aw'!d1g&7   		    	!!c                  H    	  d   dk(  r	 d   dk(  ryy# t         $ r Y y w xY w)Nr   requestrM   rf   TFr_   rg   s   r    rb   z#serialize.<locals>._is_request_body   s;    	Aw)#Q6(9   		ri   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)NrM   )
is_databagr`   should_repr_stringsremaining_depthremaining_breadthz=<failed to serialize, use init(debug=True) to see error logs>)	r   r2   CYCLE_MARKERr8   rO   BaseExceptionr   sysexc_info)r1   rm   r`   rn   rU   rp   ro   result_serialize_node_implmemorW   rX   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 )NrA   )
isinstancer   metadatar9   )r1   rY   s    r    _flatten_annotatedz%serialize.<locals>._flatten_annotated   s*    c>*%%))C
r"   c                 B   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         }|s|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)rw   ro   __sentry_repr__)rO   rM   )rU   rn   rm   r`   ro   rp   zutf-8replace   re   r4   description)rz   r   floatMAX_DATABAG_DEPTHMAX_DATABAG_BREADTHr   r   NotImplementedgetattrtyper@   intmathisinfisnancallabler   rQ   r
   r   dictitemsrO   serializable_str_typestupler#   	enumerater   bytes	bytearraydecode)r1   rm   r`   rn   ro   rp   is_span_attributehintsr   ru   sentry_reprrv_dictikvstr_krv_listis_span_descriptionrY   r|   rc   rb   rh   rK   rx   rF   keep_request_bodiesrE   rw   rX   s                     r    rv   z'serialize.<locals>._serialize_node_impl   s    c>*"'&")$J".0O#6"',$)%L!"*&7O$,(;% %&?a+?Hc?+,) !3C!8EUV  .0+1G!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)rT   r   r   N)r   Optional[bool])NNNNNN)r1   r   rm   r   r`   r   rn   r   rU   zOptional[Segment]rp   Optional[Union[int, float]]ro   r   r   r   )r1   r   r   r   )r1   r   rm   r   r`   r   rn   r   ro   Optional[Union[float, int]]rp   r   r   r   )r(   r8   rQ   r	   setrz   r   )eventkwargsserialized_eventrY   r|   rc   rb   rh   rK   rx   rv   rG   rF   r   rE   rw   rW   rX   s      @@@@@@@@@@@@@@@r    	serializer   d   s   ( 6DD)+J &

+BD IX U(.

3Et(LjjE*G28**]D2QK$% $C $
78 (,,004'+;?9=#0#0$#0 *#0 .	#0
 %#0 9#0 7#0 
#0 #0JJRJR$JR *JR .	JR
 7JR 9JR 
JR JR JR^ d#)*5;F;:*5Et*L(21W%!!%(!!%(s   ,&D( (D?)r   ReprProcessorr   N)r   Dict[str, Any]r   r   r   r   )1rs   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   rQ   Spanr   r   Segmentr   r   
memoryviewr   MAX_EVENT_BYTESr   r   rq   r   __annotations__r!   r#   r   r&   r(   r   rA   r"   r    <module>r      s    
  2 2   !#%4S>Dc4S>2E:Lc:Q4RRSMCHoG ui<      13 - 2- !)# .t  2 28b)r"   