o
    h3                     @   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$   X/var/www/html/aiguide_backend/venv/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 )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   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   
stacktracer?   frames   varsT)threads	exceptionvalues      NFrC   )p0rI   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   breadcrumbsr?   rQ      TextraNFrT   )rvis_request_bodyrU   )_is_request_bodyrW   rI   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?   dataTFrT   r$   rV   r$   r%   r]      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_databagr\   should_repr_stringsremaining_depthremaining_breadthz=<failed to serialize, use init(debug=True) to see error logs>)	r"   r/   CYCLE_MARKERr3   rA   BaseExceptionr   sysexc_info)r.   ra   r\   rb   rF   rd   rc   result)_serialize_node_implmemorH   rI   r$   r%   _serialize_node   s\   

z"serialize.<locals>._serialize_nodec                    s$   t | tr di | j | j} | S )Nr$   )
isinstancer   metadatar5   )r.   )rJ   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)rk   rc   __sentry_repr__)rA   r?   )rF   rb   ra   r\   rc   rd   zutf-8replacerM   spansr0   description)!rm   r   floatMAX_DATABAG_DEPTHMAX_DATABAG_BREADTHr   r   r!   NotImplementedgetattrtypeboolr   mathisinfisnancallabler   r	   r   r   dictr   rA   serializable_str_typesr   r   	enumerater"   bytes	bytearraydecoder   )r.   ra   r\   rb   rc   rd   hintsr#   ri   sentry_reprrv_dictikvstr_krv_listis_span_description)
rJ   ro   r^   r]   rl   rW   keep_request_bodiesr>   rk   rI   r$   r%   rj     s   
	





&z'serialize.<locals>._serialize_node_implTr   _metaF)NNNNNN)r'   r3   r   setrm   r   )eventkwargsserialized_eventr$   )rJ   ro   r^   r]   rl   rj   rW   r   r>   rk   rH   rI   r%   	serializeu   s6   && 
r   )4rg   r   r   sentry_sdk.utilsr   r   r   r   r   r   sentry_sdk._compatr	   r
   r   r   r   r   sentry_sdk._typesr   typesr   typingr   r   r   r   r   r   r   r   r   r   strSpanReprProcessorintSegmentcollectionsr   r   r   r   collections.abcMAX_EVENT_BYTESry   rz   re   r!   r&   objectr'   r   r$   r$   r$   r%   <module>   sB       
 