JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr 0i4lddlZddlZddlmZmZmZddlmZddlmZm Z m Z m Z m Z m Z ddlmZer]ddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZeeefZeeeeefgeeeffZeeefZ ee!e"e#fZ$dZ%dZ&dZ'dZ(gZ)dZ*eegZ+dZ,GddZ-dZ.y)N)MappingSequenceSet)datetime)AnnotatedValuecapture_internal_exceptiondisable_capture_eventformat_timestamp safe_repr strip_string) TYPE_CHECKING) TracebackType)Any)Callable)ContextManager)Dict)List)Optional)Type)Union)NotImplementedTypei@B zc.tj|yN)global_repr_processorsappend) processors D/opt/hc_python/lib/python3.12/site-packages/sentry_sdk/serializer.pyadd_global_repr_processorr =s!!),c.tj|yr)sequence_typesr)tys radd_repr_sequence_typer%Es"r!c(eZdZdZdZdZdZdZy)Memo_ids_objsc i|_g|_yrr()selfs r__init__z Memo.__init__Ms  r!c<|jj||Sr)r*rr,objs rmemoizez Memo.memoizeRs # r!c|jd}t||jvry||jt|<y)NTF)r*idr)r/s r __enter__zMemo.__enter__Ws7jjn c7dii !$DIIbg r!c~|jjt|jjdyr)r)popr4r*)r,r$valuetbs r__exit__z Memo.__exit__`s& b)*D1r!N)__name__ __module__ __qualname__ __slots__r-r1r5r:r!rr'r'Js!I  2r!r'c * tgg|jdddk( |jdd|jdd |jdd fdfd  fd fd fd  d fd fd f d tjd  |fi|} srt |t rd|d<|tjdS#tjdwxYw)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_sizeNalwaysmax_value_lengthis_varsF custom_reprcp d}|}|xs t|S#t$rt|cYSwxYwr)r Exception)r8 repr_valuerEs r_safe_repr_wrapperz%serialize.._safe_repr_wrappersG $J&(/ 15!1 1 $U# # $s 55cPttkrY tdz }djt|i}j |ttkrYdjdij |y#t$ri}Y[wxYw)Nr3)len setdefaultstr IndexErrorrupdate)metasegmentnode meta_stackpaths r _annotatezserialize.._annotates*oT* s:23!"~00WrB   d #*oT* 2!!"b)006   s/B B%$B%c ry}|dvr|Sd}|dk(rddk(rdy|dk(ry y #t$rYy wxYw) 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 breadcrumbsrKvaluesextraNFrP)is_request_bodyp0_is_request_bodyrDrVs r _is_databagzserialize.._is_databagsr .0O,.&&aB]"tAw(':QW}   s3 333 ??cH ddk(r ddk(ryy#t$rYywxYw)Nrspansr[dataTFr]rVsr_is_span_attributez%serialize.._is_span_attributes; Aw'!d1g&7    !!cH ddk(r ddk(ryy#t$rYywxYw)NrrequestrKrdTFr]resrr`z#serialize.._is_request_bodys; Aw)#Q6(9  rgc | j| j|5}|r3tcddd|" j t dzd=SS||||||cddd|" j t dzd=SS#1swYnxYwnx#t $rlt tj|r&Y|" j t dzd=yyY|" j t dzd=yywxYw |" j t dzd=yy#|" j t dzd=wwxYw)NrK) is_databagr^should_repr_stringsremaining_depthremaining_breadthz=) rr1 CYCLE_MARKERr7rM BaseExceptionrsysexc_info) r0rkr^rlrSrnrmresult_serialize_node_implmemorUrVs r_serialize_nodez"serialize.._serialize_nodes   KK  0c"f'#"(" s4y1}/#!,)$3(;$3&7  #"(" s4y1}/#)#""  &s||~ 6V" s4y1}/#" s4y1}/# #(" s4y1}/#w" s4y1}/#sQB%B B% B* B%B!B%$E%(D E3EDE&E)cdt|trdi|j|j}|S)Nr?) isinstancermetadatar8)r0rWs r_flatten_annotatedz%serialize.._flatten_annotateds* c> *  % %))C r!c B t|trd}|}|}|}|r+|rrtd}td}n|t}|t}|}|-|dkr(ddgg|rt |Sy}|s|r1t r+|d}t D]}|||} | tus| cStt|d d} |t|tttfrF|s:t|tr2tj|stj|r|S|St| r| |St|t r|st#t%|S|St|t&r~t)|j+}i} d} |j+D]L\} }|| |k\rt-| | St#| }|||||||d z nd| }|| |<| d z } N| St|t.sqt|t1t2rXg}t5|D]F\} }|| |k\rt-| |S|j7|| |||||d z nd| H|S|r |}nJt|t8st|t:r|j=d d}t|t"s|}t-dk(xrddk(xrddk(}|r|St |S)NFinfrz!limitx)rem) max_length)rurm__sentry_repr__)rMrK)rSrlrkr^rmrnzutf-8replacercr3 description)rxrfloatMAX_DATABAG_DEPTHMAX_DATABAG_BREADTHr rNotImplementedgetattrtypeboolintmathisinfisnancallablerrOr rdictitemsrMserializable_str_typestupler# enumeraterbytes bytearraydecode)r0rkr^rlrmrnis_span_attributehintsrrs sentry_reprrv_dictikvstr_krv_listis_span_descriptionrWrzrar`rfrIrvrDkeep_request_bodiesrCrurVs rrtz'serialize.._serialize_node_implsz c> *"'   &")   $J  ".0O #6"',$)%L!"*&7O$,(;% %  &?a+? Hc?+ ,) !3C!8EUV.0 +1G!oFE3 "3./-f554 d3i):DA ;*S4e*<="3&DJJsOtzz#)#.. k "s# # X &+$S)* (,  W %syy{#CGA 1$0Q:K5K#c(+"NA#!(;)$3/>/J!+PT&7 "#Q%$(NC!78Z ~&> G!#1$0Q:K5K#c(+ N# !,?#-(73B3NOa/TX*;   '&N $S)C#u%C)Cjj)4c3'(- IN OtAw'1 Od2h-6O  J!,s?O"PQQr!Tr_meta)NNNNNN)r'r7r setrxr)eventkwargsserialized_eventrWrzrar`rfrIrvrtrErDrrCrurUrVs @@@@@@@@@@@@@@@r serializerjs* 6D DJ **%rs 22!#%4 S>Dc4S>2E:Lc:Q4RRSMCHoGui< - C 22@k)r!