
    Yf1                     b   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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+ 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)NotImplementedTypeEventi@B    
   z<cyclic>c                 .    t         j                  |        y N)global_repr_processorsappend)	processors    U/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/sentry_sdk/serializer.pyadd_global_repr_processorr!   <   s    !!),    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__D   s    	
r"   c                 <    | j                   j                  |       | S r   )r'   r   r)   objs     r    memoizezMemo.memoizeI   s    

#r"   c                     | j                   d   }t        |      | j                  v ry|| j                  t        |      <   y)NTF)r'   idr&   r,   s     r    	__enter__zMemo.__enter__N   s7    jjnc7dii!$DIIbgr"   c                 ~    | j                   j                  t        | j                  j                               d        y r   )r&   popr1   r'   )r)   tyvaluetbs       r    __exit__zMemo.__exit__W   s&     			b)*D1r"   N)__name__
__module____qualname__	__slots__r*   r.   r2   r8    r"   r    r$   r$   A   s    !I

2r"   r$   c           
        	
 t               g g |j                  dd       dk(  
|j                  dd       fdfd		fdfd	 	 	 	 	 	 dfd	fd		
f
d
t        j                  d       	  | fi |}rt	        |t
              rd   |d<   |t        j                  d       S # t        j                  d       w xY w)Nmax_request_body_sizealwaysmax_value_lengthc                  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   r0    )len
setdefaultstr
IndexErrorr   update)metasegmentnode
meta_stackpaths      r    	_annotatezserialize.<locals>._annotatel   s    *oT*s:23!"~00WrB d# *oT* 	2!!"b)006  s   /B B%$B%c                      	 d   } | dk(  rd   dk(  r	d   dk(  ry| dv r!d   d	k(  rd   dk(  rd
   dk(  r	d   dk(  ryy# t         $ r Y yw xY 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   
stacktracerC   frames   varsT)threads	exceptionvalues      NFrH   )p0rN   s    r    _should_repr_stringsz'serialize.<locals>._should_repr_stringsy   s    (	aB\!d1g&9d1g>O ..Gx'G|+Gx'Gv%   		s   A $A 	AAc                      	         } | dv r| S         }|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.

        :returns: Works like `_should_repr_strings()`. `True` for "yes",
            `False` for :"no", `None` for "maybe soon".
        )TNr   breadcrumbsrC   rW      TextraNFrZ   )rvis_request_bodyr[   _is_request_bodyr\   rN   s      r    _is_databagzserialize.<locals>._is_databag   s    	%'B\!	.0O,.&&aB]"tAw(':QW}    		s   = = = = 	A	A	c                  H    	  d   dk(  r	 d   dk(  ryy# t         $ r Y y w xY w)Nr   requestrC   dataTFrZ   )rN   s   r    rc   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)NrC   )
is_databagrb   should_repr_stringsremaining_depthremaining_breadthz=<failed to serialize, use init(debug=True) to see error logs>)	r   r.   CYCLE_MARKERr4   rE   BaseExceptionr   sysexc_info)r-   ri   rb   rj   rK   rl   rk   result_serialize_node_implmemorM   rN   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   metadatar6   )r-   rO   s    r    _flatten_annotatedz%serialize.<locals>._flatten_annotated   s*    c>*%%))C
r"   c                 R  
 t        | t              rd}|        }|        }|        }|r+|rrt        d      }t        d      }n|t        }|t        } |       } |0|dk  r+ ddgg       |r t        t        |                   S y |r1t        r+|d}t        D ]  } || |      }|t        us |      c S  t        t        |       d	d       }	| t        | t        t        t        f      rI|s:t        | t              r5t        j                  |       st        j                  |       rt        |       S | S t!        |	      r |	|       S t        | t"              r!|st%        t'        |             S t        |       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        | t0              snt        | t2        t4        f      rXg }t7        |       D ]F  \  }}|||k\  r t/        |       
        |S |j9                   |||||||dz
  nd |             H |S |rt        |       } nMt        | t:              st        | t<              r| j?                  dd      } t        | t$              st        |       } 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)rs   rk   __sentry_repr__)rE   rC   )rK   rj   ri   rb   rk   rl   zutf-8replacerS   spansr0   description) rv   r   floatMAX_DATABAG_DEPTHMAX_DATABAG_BREADTHr   r   r   NotImplementedgetattrtypeboolintmathisinfisnancallabler   rG   r
   r   dictitemsrE   serializable_str_typesr   r   	enumerater   bytes	bytearraydecode)r-   ri   rb   rj   rk   rl   hintsr   rq   sentry_reprrv_dictikvstr_krv_listis_span_descriptionrO   rx   rd   rc   rt   r\   keep_request_bodiesrA   rs   rN   s                    r    rr   z'serialize.<locals>._serialize_node_impl   sy    c>*"'&"6"8$J".0O#6"',$)%L!"*&7O$,(;% %&?a+?Hc?+,) 3<LM  0!oFE3 6	"3./-f556
 d3i):DA;*S4e*<="3&DJJsOtzz# ~%
k"s##X& + $S)* s^ W% syy{#CGA		 1$0Q:K5K#c(+" N A#!(;)$3/>/J!+PT&7
 "#Q%( NC!78Z#x>
 G!# 1$0Q:K5K#c(+  N # !,?#-(73B3NOa/TX*;
& NC.C#u%C)Cjj)4c3'n INOtAw'1Od2h-6O 	 J!,s?O"PQQr"   Tr   _metaF)NNNNNN)r$   r4   r	   setrv   r   )eventkwargsserialized_eventrO   rx   rd   rc   rt   rr   r\   r   rA   rs   rM   rN   s      @@@@@@@@@@@@r    	serializer   a   s    6DDJ 	

*D1X=  zz"4d;7$L<  $0 $0LJR JR^ d#)*5;F;*%5t<(21W%!!%(!!%(s   $C C").ro   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   rG   SpanReprProcessorr   Segmentr   r   
memoryviewr   MAX_EVENT_BYTESr   r   rm   r   r!   r$   r   r=   r"   r    <module>r      s    
  2 2   ,#%;S>Dc4S>2E:Lc:Q4RRSMCHoG ui<       -
2 2@j)r"   