o
    Zh3                     @   s  d dl Z d dl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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rd dl%m&Z&m'Z'm(Z( ee Z)nd dl*m&Z&m'Z'm(Z( ee Z)dZ+dZ,dZ-dZ.g Z/dd Z0G dd de1Z2dd Z3dS )    N)datetime)AnnotatedValuecapture_internal_exceptiondisable_capture_eventformat_timestamp	safe_reprstrip_string)	text_typePY2string_typesnumber_types	iteritemsbinary_sequence_types)TYPE_CHECKING)TracebackType)Any)Callable)ContextManager)Dict)List)Optional)Type)Union)NotImplementedTypeEvent)MappingSequenceSeti@B    
   z<cyclic>c                 C   s   t |  d S N)global_repr_processorsappend)	processor r$   L/var/www/html/lang_env/lib/python3.10/site-packages/sentry_sdk/serializer.pyadd_global_repr_processorP   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__X   s   
zMemo.__init__c                 C   s   | j | | S r    )r*   r"   r+   objr$   r$   r%   memoize]   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__b   s
   
zMemo.__enter__c                 C   s   | j t| j d  d S r    )r)   popr1   r*   )r+   tyvaluetbr$   r$   r%   __exit__k   s   zMemo.__exit__N)__name__
__module____qualname__	__slots__r,   r/   r2   r7   r$   r$   r$   r%   r'   U   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 )NZ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   r0    )len
setdefaultr	   
IndexErrorr"   update)metasegmentnode)
meta_stackpathr$   r%   	_annotate   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   Z
stacktracer>   frames   varsT)threads	exceptionvalues      NFrB   )p0rH   r$   r%   _should_repr_strings   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   Zbreadcrumbsr>   rO      TextraNFrR   )rvis_request_bodyrS   )_is_request_bodyrU   rH   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   requestr>   dataTFrR   r$   rT   r$   r%   rZ      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 )Nr>   )
is_databagrY   should_repr_stringsremaining_depthremaining_breadthz=<failed to serialize, use init(debug=True) to see error logs>)	r"   r/   CYCLE_MARKERr3   r@   BaseExceptionr   sysexc_info)r.   r^   rY   r_   rE   ra   r`   result)_serialize_node_implmemorG   rH   r$   r%   _serialize_node   s\   

z"serialize.<locals>._serialize_nodec                    s$   t | tr di | j | j} | S )Nr$   )
isinstancer   metadatar5   )r.   )rI   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fr|st | trt| st| rt| S | S t|	r|	| S t | tr|stt| S t| S t | trtt| } i }
d}t| D ]5\}}|d ur||kr t| d
  |
S t|}||||||d ur|d nd |d}||
|< |d7 }q|
S t | tsLt | ttfrLg }t| D ]0\}}|d ur1||kr1 t| d
  |S |||||||d urB|d nd |d q|S |rTt| } nt | ts`t | trf| dd} t | t spt| } t	dko	d dko	d dk}|r| S t| dS )NFinfr   z!limitx)rem)
max_length)rh   r`   Z__sentry_repr__)r@   r>   )rE   r_   r^   rY   r`   ra   zutf-8replacerK   spansr0   description)!rj   r   floatMAX_DATABAG_DEPTHMAX_DATABAG_BREADTHr   r   r!   NotImplementedgetattrtypeboolr   mathisinfisnancallabler   r	   r   r   dictr   r@   serializable_str_typesr   r   	enumerater"   bytes	bytearraydecoder   )r.   r^   rY   r_   r`   ra   hintsr#   rf   Zsentry_reprZrv_dictikvZstr_kZrv_listZis_span_description)
rI   rl   r[   rZ   ri   rU   keep_request_bodiesr=   rh   rH   r$   r%   rg     s   
	





&z'serialize.<locals>._serialize_node_implTr   _metaF)NNNNNN)r'   r3   r   setrj   r   )eventkwargsZserialized_eventr$   )rI   rl   r[   rZ   ri   rg   rU   r   r=   rh   rG   rH   r%   	serializeu   s6   && 
r   )4rd   r{   r   Zsentry_sdk.utilsr   r   r   r   r   r   Zsentry_sdk._compatr	   r
   r   r   r   r   Zsentry_sdk._typesr   typesr   typingr   r   r   r   r   r   r   r   r   r   strSpanZReprProcessorintSegmentcollectionsr   r   r   r   collections.abcZMAX_EVENT_BYTESru   rv   rb   r!   r&   objectr'   r   r$   r$   r$   r%   <module>   sB       
 