U 췀gy@sdZddlmZddlmZddlZddlmZddl m Z m Z m Z ddl mZerddl mZdd l mZdd l mZdd l mZdd lmZed edefdZe dZedkZesddZn ddlmZddZddZdS)z1 Create spans from Django middleware invocations )wraps)VERSIONN)OP) ContextVartransaction_from_functioncapture_internal_exceptions) TYPE_CHECKING)Any)Callable)Optional)TypeVar)SpanF.)boundZ$import_string_should_wrap_middleware)cCstSN)object)_rW/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/integrations/django/middleware.py$rr)_asgi_middleware_mixin_factorycsDddlm}|jfdd}||_|jjfdd}||j_dS)Nr)basecs |}tdrt||}|Sr)%_import_string_should_wrap_middlewareget_wrap_middleware) dotted_pathrv)old_import_stringrrsentry_patched_import_string/s  z>patch_django_middlewares..sentry_patched_import_stringc s*tdz||WStdXdS)NTF)rset)argskwargs)old_load_middlewarerrsentry_patched_load_middleware<s z@patch_django_middlewares..sentry_patched_load_middleware)Zdjango.core.handlersrZ import_string BaseHandlerZload_middleware)rr!r&r)r r%rpatch_django_middlewares)s   r(cslddlmfddfddGfdddt}d D] }t|rFt||t|qF|S) Nr)DjangoIntegrationcsxt}|dks|js dSt|}}t|dd}|rHd||}tjtj |j d}| d|| d|S)N__name__z{}.{})opnameoriginzdjango.function_namezdjango.middleware_name) sentry_sdkZ get_clientZget_integrationZmiddleware_spansrgetattrformatZ start_spanrZMIDDLEWARE_DJANGOr-Zset_tag) old_methodZ integrationZ function_name descriptionZfunction_basenamemiddleware_span)r)middleware_namerr_check_middleware_spanKs     z0_wrap_middleware.._check_middleware_spanc s^tNfdd}zt|}j|_Wntk rBYnX|W5QRSQRXS)Nc s@}|dkr||S|||W5QRSQRXdSrr)r#r$r3)r5r1rrsentry_wrapped_methodfs  zL_wrap_middleware.._get_wrapped_method..sentry_wrapped_method)rr__self__ Exception)r1r6r5r1r_get_wrapped_methodbs   z-_wrap_middleware.._get_wrapped_methodcsTeZdZeddZeo"eddZd fdd Zfdd Zfd d Z Z S) z2_wrap_middleware..SentryWrappingMiddleware sync_capableT async_capableFNcsF|r|f|||_n |||_||_d|_|jrBt|dSr)_inner get_response _call_methodr=super__init__)selfr?r#r$) __class__ middlewarerrrBs z;_wrap_middleware..SentryWrappingMiddleware.__init__cs0|dkrtt|j|}|}||j|<|S)N)process_requestZ process_viewZprocess_template_responseprocess_responseZprocess_exception)AttributeErrorr/r>__dict__)rC method_namer1r)r;rr __getattr__s   z>_wrap_middleware..SentryWrappingMiddleware.__getattr__c s|t|dr|r|j||S|j}|dkr:|jj|_}|d}|dkrV|||S||||W5QRSQRXdS)Nasync_route_checkr:)hasattrrLZ __acall__r@r>__call__)rCr#r$fr3r9rrrNs   z;_wrap_middleware..SentryWrappingMiddleware.__call__)N) r* __module__ __qualname__r/r< DJANGO_SUPPORTS_ASYNC_MIDDLEWAREr=rBrKrN __classcell__r)r5r;rE)rDrSentryWrappingMiddleware}s  rT)r*rPrQ)Zsentry_sdk.integrations.djangor)rrMsetattrr/)rEr4rTattrr)r)r5r;rEr4rrGs  6 r)__doc__ functoolsrdjangorZDJANGO_VERSIONr.Zsentry_sdk.constsrZsentry_sdk.utilsrrrtypingrr r r r Zsentry_sdk.tracingr rrrRrZasgir(rrrrrs,