U 췀g@s^ddlZddlmZddlmZddlmZddlmZerddl m Z ddl m Z ddlm Z dd lmZdd lmZdd lmZdd lmZdd lmZeZeeZedeeeeeeedZeddeiZeeeefZeedfZeeefZeeeeefZeeeefZdZdZ er6ddZ!nddZ!ddZ"ddZ#e fddZ$dS)N)deque)PY311)filename_for_module) TYPE_CHECKING)LRUCache) FrameType)Deque)List)Optional)Sequence)Tuple) TypedDictProcessedFrame)abs_pathfilenamefunctionlinenomoduleProcessedThreadMetadataname.ecCs|jjSN)f_codeZ co_qualname)framerG/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/profiler/utils.pyget_frame_nameBsrc Cs|j}|j}|j}zR|rb|ddkrbd|jkrbt|jdjD]"}||jkr>d|j|WSq>Wnt t fk r|YnXzN|r|ddkrd|jkr|jdjD]"}||jkrd|j|WSqWnt t fk rYnX|S)Nrselfz{}.{}cls) r co_varnamesco_namef_localstype__mro____dict__format__name__AttributeError ValueError)rrr rrrrrrHs8    cCs|jj|jt|fSr)r co_filenamef_linenor) raw_framerrrframe_idxsr-cCsZ|jj}z|jd}Wntk r.d}YnXtj|||t||pJd|d|jdS)Nr')rrrrr) rr* f_globals Exceptionospathjoinrr+)fidr,cwdrrrrr extract_frame}s   r6c Cst|d}|dk r(|j}|||}q tdd|D}g}t|D]@\}} || } | dkr|t| |||} || | || qFt|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. )maxlenNcss|]}t|VqdSr)r-).0r,rrr sz extract_stack..) rf_backappendtuple enumerategetr6setlenhash) r,cacher5Zmax_stack_depthZ raw_framesr:Z frame_idsframesir4rZstack_idrrr extract_stacks     rE)%r1 collectionsrZsentry_sdk._compatrZsentry_sdk.utilsrtypingrZsentry_sdk._lru_cachertypesrrr r r r typing_extensionsr strZThreadIdintZProcessedStackrrZFrameIdZFrameIdsZStackIdZExtractedStackZExtractedSampleZDEFAULT_SAMPLING_FREQUENCYZMAX_STACK_DEPTHrr-r6rErrrrs^                0!