o
    #if1                     @   sV  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rd 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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d Z+G dd dZ,dd Z-dS )    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)NotImplementedTypeEventi@B    
   z<cyclic>c                 C   s   t |  d S N)global_repr_processorsappend)	processor r   N/var/www/html/corbot_env/lib/python3.10/site-packages/sentry_sdk/serializer.pyadd_global_repr_processor<   s   r    c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )Memo_ids_objsc                 C   s   i | _ g | _d S r   r"   )selfr   r   r   __init__D   s   
zMemo.__init__c                 C   s   | j | | S r   )r$   r   r%   objr   r   r   memoizeI   s   zMemo.memoizec                 C   s.   | j d }t|| jv rdS || jt|< dS )NTF)r$   idr#   r'   r   r   r   	__enter__N   s
   
zMemo.__enter__c                 C   s   | j t| j d  d S r   )r#   popr+   r$   )r%   tyvaluetbr   r   r   __exit__W   s   zMemo.__exit__N)__name__
__module____qualname__	__slots__r&   r)   r,   r1   r   r   r   r   r!   A   s    	r!   c              
      s   t  	g g 
|dd dk|dd 
fdd fddfdd	fd
d	 	 	 	 	 	 d	
fdd	 fdd 	f
ddtd z| fi |}
rpt|trp
d |d< |W td S td w )Nmax_request_body_sizealwaysmax_value_lengthc                     s   t  t kr5zt  d  } d t|i }W n ty'   i }Y nw  | t  t ks d di |  d S )N   r*    )len
setdefaultstr
IndexErrorr   update)metasegmentnode)
meta_stackpathr   r   	_annotatel   s   
	zserialize.<locals>._annotatec                     s   zE d } | dkr d dkr d dkrW dS | dv r7 d d	kr: d dkr= d
 dkr@ d dkrCW dS W dS W dS W dS W dS W dS  t yO   Y dS w )a  
        By default non-serializable objects are going through
        safe_repr(). For certain places in the event (local vars) we
        want to repr() even 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.

        For container-types we still don't do anything different.
        Generally we just try to make the Sentry UI present exactly
        what a pretty-printed repr would look like.

        :returns: `True` if we are somewhere in frame variables, and `False` if
            we are in a position where we will never encounter frame variables
            when recursing (for example, we're in `event.extra`). `None` if we
            are not (yet) in frame variables, but might encounter them when
            recursing (e.g.  we're in `event.exception`)
        r   
stacktracer9   frames   varsT)threads	exceptionvalues      NFr>   )p0rD   r   r   _should_repr_stringsy   s.    
	z'serialize.<locals>._should_repr_stringsc                     s|   z3 } | dv r| W S   }|dv r|W S d }|dkr*d dkr*d  W dS |dkr1W dS W d
S  t y=   Y d	S w )z
        A databag is any value that we need to trim.

        :returns: Works like `_should_repr_strings()`. `True` for "yes",
            `False` for :"no", `None` for "maybe soon".
        )TNr   breadcrumbsr9   rL      TextraNFrO   )rvis_request_bodyrP   )_is_request_bodyrR   rD   r   r   _is_databag   s$   zserialize.<locals>._is_databagc                      s@   z d dkr d dkrW dS W dS W dS  t y   Y d S w )Nr   requestr9   dataTFrO   r   rQ   r   r   rX      s   z#serialize.<locals>._is_request_bodyc              	      s  |d ur	 | zzT| E}|r0tW  d    W W |d ur/  td d = S S  | |||||dW  d    W W |d urT  td d = S S 1 sXw   Y  W n= ty   tt  |rY W |d ur  td d = dS dS Y W |d ur  td d = d S d S w W |d ur  td d = d S d S |d urÈ  td d = w )Nr9   )
is_databagrW   should_repr_stringsremaining_depthremaining_breadthz=<failed to serialize, use init(debug=True) to see error logs>)	r   r)   CYCLE_MARKERr-   r;   BaseExceptionr   sysexc_info)r(   r\   rW   r]   rA   r_   r^   result)_serialize_node_implmemorC   rD   r   r   _serialize_node   s\   

z"serialize.<locals>._serialize_nodec                    s$   t | tr di | j | j} | S )Nr   )
isinstancer   metadatar/   )r(   )rE   r   r   _flatten_annotated   s   
z%serialize.<locals>._flatten_annotatedc                    s$  t | trd}|d u r }|d u r }|d u r }|r7|r+r+td}td}n|d u r1t}|d u r7t}| } |d urY|dkrY ddggd |rWtt| dS d S |rvtrv|d}tD ]}|| |}|turu|  S qdt	t
| d	d }	| d u st | tttfr|st | trt| st| rt| S | S t|	r|	| S t | tr|stt| S t| S t | trt|  } i }
d}|  D ]5\}}|d ur||kr t| d
  |
S t|}||||||d ur|d nd |d}||
|< |d7 }q|
S t | tsMt | ttfrMg }t| D ]0\}}|d ur2||kr2 t| d
  |S |||||||d urC|d nd |d q|S |rUt| } nt | tsat | trg| dd} t | tsqt| } t	dko	d dko	d dk}|r| S t| dS )NFinfr   z!limitx)rem)
max_length)rf   r^   __sentry_repr__)r;   r9   )rA   r]   r\   rW   r^   r_   zutf-8replacerH   spansr*   description) rh   r   floatMAX_DATABAG_DEPTHMAX_DATABAG_BREADTHr   r
   r   NotImplementedgetattrtypeboolintmathisinfisnancallabler   r=   r	   r   dictitemsr;   serializable_str_typesr   r   	enumerater   bytes	bytearraydecode)r(   r\   rW   r]   r^   r_   hintsr   rd   sentry_reprrv_dictikvstr_krv_listis_span_description)
rE   rj   rY   rX   rg   rR   keep_request_bodiesr8   rf   rD   r   r   re      s   
	





&z'serialize.<locals>._serialize_node_implTr   _metaF)NNNNNN)r!   r-   r   setrh   r   )eventkwargsserialized_eventr   )rE   rj   rY   rX   rg   re   rR   r   r8   rf   rC   rD   r   	serializea   s6   && 
r   ).rb   r{   collections.abcr   r   r   r   sentry_sdk.utilsr   r   r   r	   r
   r   sentry_sdk._typesr   typesr   typingr   r   r   r   r   r   r   r   r   r   r=   SpanReprProcessorrz   Segmentr   r   
memoryviewr   MAX_EVENT_BYTESrt   ru   r`   r   r    r!   r   r   r   r   r   <module>   s:       