bg3ddlZddlZddlmZddlmZmZmZmZmZm Z ddl m Z m Z m Z mZmZmZddlmZernddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZmZee efZ!eeee efgeee ffZ"ee e#fZ$e rddl%m&Z&m'Z'm(Z(e ezZ)nddl*m&Z&m'Z'm(Z(e ezZ)dZ+dZ,dZ-dZ.gZ/dZ0Gdde1Z2dZ3dS)N)datetime)AnnotatedValuecapture_internal_exceptiondisable_capture_eventformat_timestamp safe_repr strip_string) text_typePY2 string_types number_types iteritemsbinary_sequence_types) TYPE_CHECKING) TracebackType)Any)Callable)ContextManager)Dict)List)Optional)Type)Union)NotImplementedTypeEvent)MappingSequenceSeti@B zc:t|dSN)global_repr_processorsappend) processors L/opt/cloudlinux/venv/lib64/python3.11/site-packages/sentry_sdk/serializer.pyadd_global_repr_processorr'Ps!!),,,,,c*eZdZdZdZdZdZdZdS)Memo_ids_objsc"i|_g|_dSr"r+)selfs r&__init__z Memo.__init__Xs  r(c:|j||Sr")r-r$r/objs r&memoizez Memo.memoize]s # r(c~|jd}t||jvrdS||jt|<dS)NTF)r-idr,r2s r& __enter__zMemo.__enter__bs<jn c77di  4!$DIbgg 5r(c|jt|jddSr")r,popr7r-)r/tyvaluetbs r&__exit__z Memo.__exit__ks4 b))**D11111r(N)__name__ __module__ __qualname__ __slots__r0r4r8r>r(r&r*r*UsU!I  22222r(r*c  t gg |dddk |dd fdfd  fdfd d fd fd  f d tjd  |fi|} r t |t r d |d <|tjdS#tjdwxYw)Nmax_request_body_sizealwaysmax_value_lengthcttkr tdz }dt|i}n#t$ri}YnwxYw|ttkddi|dS)Nr6)len setdefaultr IndexErrorr$update)metasegmentnode meta_stackpaths r& _annotatezserialize.._annotates*ooT** s:23!"~0071C1CRHH       d # # #*ooT** 2!!"b))0066666sAA%% A43A4c d}|dkrddkrddkrdS|dvr2dd kr&ddkrd dkrd dkrdSn#t$rYd SwxYwd S)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 stacktracerIframesvarsT)threads exceptionvaluesNFrM)p0rSs r&_should_repr_stringsz'serialize.._should_repr_stringss( aB\!!d1g&9&9d1g>O>Ot...Gx''G|++Gx''Gv%%t   44 us&A"4A"" A0/A0c }|dvr|S}|dvr|Sd}|dkrddkr ddS|dkrdSn#t$rYd SwxYwd S) 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 breadcrumbsrIr\TextraNFr_)rvis_request_bodyr`_is_request_bodyrarSs r& _is_databagzserialize.._is_databags %%''B\!! ..00O,..&&aB]""tAw(':':QtW}}t   44 us!AA"AA AAcb ddkrddkrdSn#t$rYdSwxYwdS)NrrequestrIdataTFr_)rSsr&rhz#serialize.._is_request_bodysT Aw)##Q6(9(9t   44 us  ,,c l| | |5}|r?tcddd|*  t dzd=SS||||||cddd|*  t dzd=SS#1swxYwYn#t $rt tj|r0Y|+  t dzd=dSdSY|+  t dzd=dSdSwxYw |+  t dzd=dSdS#|)  t dzd=wxYw)NrI) is_databagrgshould_repr_stringsremaining_depthremaining_breadthz=) r$r4 CYCLE_MARKERr:rK BaseExceptionrsysexc_info) r3rnrgrorPrqrpresult_serialize_node_implmemorRrSs r&_serialize_nodez"serialize.._serialize_nodesm   KK  0c"" f('       (" s4yy1}//#!,+)$3(;$3&7        (" s4yy1}//#)             &s|~~ 6 6 6 WV" s4yy1}///#"" s4yy1}///#"  (" s4yy1}///#"w" s4yy1}/////s]C B: C1B: C:B>>CB>CF,E2F"FEF-F3cZt|trdi|j|j}|S)NrC) isinstancermetadatar<)r3rTs r&_flatten_annotatedz%serialize.._flatten_annotateds9 c> * *  I % % % % %)C r(c  t|trd}| }| }| }|r5|r!rtd}td}n|t}|t}|}|@|dkr:ddgg|r't t |SdS|r8tr1|d}tD]$}|||}|tur |cS%tt|d d} |t|ttfrP|s=t|tr7tj|stj|rt |S|St!| r | |St|t"r-|st%t'|nt |St|t(rt+t-|}i} d} t-|D]Z\} } |!| |krt/| n3t%| }| ||||||d z nd| } | | |<| d z } [| St|t0st|t2t4frhg}t7|D]T\} } |!| |krt/| n-|| | |||||d z nd| U|S|rt |}ndt|t:st|t<r|d d}t|t@st |}t/dkoddko ddk}|r|St |S)NFinfrz!limitx)rem) max_length)rxrp__sentry_repr__)rKrI)rPrornrgrprqzutf-8replacerXspansr6 description)!r{rfloatMAX_DATABAG_DEPTHMAX_DATABAG_BREADTHr rr#NotImplementedgetattrtypeboolr mathisinfisnancallablerr rrdictrrKserializable_str_typesrr enumerater$bytes bytearraydecoder )r3rnrgrorprqhintsr%rv sentry_reprrv_dictikvstr_krv_listis_span_descriptionrTr}rirhryrakeep_request_bodiesrGrxrSs r&rwz'serialize.._serialize_node_impls c> * * ("'   &"6"6"8"8   $J  "..00O  < <#6 <"',,$)%LL!!"*&7O$,(;%  %%  &?a+?+? IHc?+ , , , , )) 3??;" 3&& ,0JsOO ?Cz# !~~% k " "@ ;s## # X & &= +$ *3//000s^^  W % %6 y~~&&CGA!#  1$0Q:K5K5KI#c((++++E!! #O!(;)$3&2%4a$7$7&7   "#QNC!788 Z #x> >  G!#  1$0Q:K5K5KI#c((++++E#O !,?#-(7*6)8!(;(;!*;       N  %C..CC#u%% 5C)C)C 5jj)44c<00 %nn IIN OtAw'1 Od2h-6O   J!!,s?O"P"P"PQQQr(Tr_metaF)NNNNNN)r*r:rsetr{r)eventkwargsserialized_eventrTr}rirhryrwrarrGrxrRrSs @@@@@@@@@@@@r& serializerus 66D DJ  *D11X=zz"4d;; 7 7 7 7 7 7$$$$$L< $0$0$0$0$0$0$0$0$0LJRJRJRJRJRJRJRJRJRJRJRJRJRJR^d###)*?5;;F;;  6*%5t<< 6(21 W %!%((((!%((((s ,CC4)4rtrrsentry_sdk.utilsrrrrrr sentry_sdk._compatr r r r rrsentry_sdk._typesrtypesrtypingrrrrrrrrrrstrSpan ReprProcessorintSegment collectionsrrrrcollections.abcMAX_EVENT_BYTESrrrrr#r'objectr*rrCr(r&rs ,+++++######%%%%%%;;;;;;;; S>Dc4S>2E:Lc:Q4RRSMCHoG B3222222222),AA 7666666666*,AA --- 222226222@j)j)j)j)j)r(