0i\ tddlZddlmZddlmZddlmZddlmZerddl m Z ddl m Z ddlm Z dd lmZdd lmZdd lmZdd lmZdd lmZeZeeZedeeeeeeedZeddeiZeeeefZeedfZeeefZeeeeefZeeeefZdZdZ erdZ!ndZ!dZ"dZ#e fdZ$y)N)deque)PY311)filename_for_module) TYPE_CHECKING)LRUCache) FrameType)Deque)List)Optional)Sequence)Tuple) TypedDictProcessedFrame)abs_pathfilenamefunctionlinenomoduleProcessedThreadMetadataname.ec.|jjSN)f_code co_qualname)frames H/opt/hc_python/lib/python3.12/site-packages/sentry_sdk/profiler/utils.pyget_frame_namerBs||'''cB|j}|j}|j} |ri|ddk(rad|jvrSt |jdj D].}||j vsdj|j|cS |r`|ddk(rXd|jvrJ|jdj D].}||j vsdj|j|cS|S#ttf$rYvwxYw#ttf$rY|SwxYw)Nrselfz{}.{}cls) r co_varnamesco_namef_localstype__mro____dict__format__name__AttributeError ValueError)rrr$rr#s rrrHs(( ~~  A& 8Vu~~=Uv 67??Cs||+&~~cllDAA@  A% 7EU^^>%088Cs||+&~~cllDAA9 ) +    +     s=A C62C6C6AD D 3D 6DD DDcZ|jj|jt|fSr)r co_filenamef_linenor) raw_frames rframe_idr2ts&    ( ()*<*W XXr c|jj} |jd}tj j |||t||xsd|d|jdS#t$rd}YNwxYw)Nr+)rrrrr) rr/ f_globals Exceptionospathjoinrr0)fidr1cwdrrs r extract_framer<ys~++H$$Z0 GGLLh/'9ATF$$  sA(( A65A6crt|}|"|j}|j||}|"td|D}g}t |D]K\}} |j | } | "t | |||} |j| | |j| Mt|t|f} | ||fS)aA Extracts the stack starting the specified frame. The extracted stack assumes the specified frame is the top of the stack, and works back to the bottom of the stack. In the event that the stack is more than `MAX_STACK_DEPTH` frames deep, only the first `MAX_STACK_DEPTH` frames will be returned. )maxlenc32K|]}t|ywr)r2).0r1s r z extract_stack..sF:ihy):s) rf_backappendtuple enumerategetr<setlenhash) r1cacher;max_stack_depth raw_framesrB frame_idsframesir:rstack_ids r extract_stackrQs o.J  !!)$    F:FFI FI&3 # =!#z!}c:E IIc5 ! e '$:Y/H Y &&r )%r7 collectionsrsentry_sdk._compatrsentry_sdk.utilsrtypingrsentry_sdk._lru_cachertypesrr r r r r typing_extensionsrstrThreadIdintProcessedStackrrFrameIdFrameIdsStackIdExtractedStackExtractedSampleDEFAULT_SAMPLING_FREQUENCYMAX_STACK_DEPTHrr2r<rQr rres $0 .+H#YN  sm   N(!       G Wc\"H CHoG7Hd>.BBCNuX~%=>?O! ( )XY B$ -'r