a
    xd                     @   s   d Z ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZmZmZ e	rddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ededef dZedZedk rdZndZedk rdd ZnddlmZ dd Zdd ZdS )z1
Create spans from Django middleware invocations
    )VERSION)Hub)wraps)MYPY)
ContextVartransaction_from_functioncapture_internal_exceptions)Any)Callable)Optional)TypeVar)SpanF.)boundZ$import_string_should_wrap_middleware)      Zimport_by_pathZimport_string)   r   c                 C   s   t S N)object)_ r   a/var/www/html/Ranjet/env/lib/python3.9/site-packages/sentry_sdk/integrations/django/middleware.py<lambda>%       r   r   )_asgi_middleware_mixin_factoryc                     sN   ddl m}  t| t  fdd}t| t| | jjfdd}|| j_d S )Nr   )basec                    s     | }t d rt|| }|S r   )%_import_string_should_wrap_middlewareget_wrap_middleware)dotted_pathrv)old_import_stringr   r   sentry_patched_import_string0   s    

z>patch_django_middlewares.<locals>.sentry_patched_import_stringc               	      s6   t d z | i |W t d S t d 0 d S )NTF)r   set)argskwargs)old_load_middlewarer   r   sentry_patched_load_middleware=   s    

z@patch_django_middlewares.<locals>.sentry_patched_load_middleware)Zdjango.core.handlersr   getattrimport_string_namesetattrBaseHandlerZload_middleware)r   r"   r'   r   )r!   r&   r   patch_django_middlewares*   s    
	r,   c                    sn   ddl m   fddfddG fdddtd	D ] }t|rHt|t| qHS )
Nr   )DjangoIntegrationc                    st   t j}| }|d u s|js"d S t| }}t| dd }|rJd||}|jd|d}|d| |d |S )N__name__z{}.{}zdjango.middleware)opdescriptionzdjango.function_namezdjango.middleware_name)	r   currentZget_integrationZmiddleware_spansr   r(   formatZ
start_spanZset_tag)
old_methodZhubZintegrationZfunction_namer0   Zfunction_basenamemiddleware_span)r-   middleware_namer   r   _check_middleware_spanL   s    
z0_wrap_middleware.<locals>._check_middleware_spanc              	      sh   t  N  fdd}zt |} j|_W n ty@   Y n0 |W  d    S 1 sZ0    Y   S )Nc                     sT    }|d u r| i |S | | i |W  d    S 1 sF0    Y  d S r   r   )r$   r%   r4   )r6   r3   r   r   sentry_wrapped_methodf   s
    zL_wrap_middleware.<locals>._get_wrapped_method.<locals>.sentry_wrapped_method)r   r   __self__	Exception)r3   r7   r6   r3   r   _get_wrapped_methodb   s    
"z-_wrap_middleware.<locals>._get_wrapped_methodc                       sF   e Zd ZeddZd
 fdd	ZfddZfdd	Z  ZS )z2_wrap_middleware.<locals>.SentryWrappingMiddlewareasync_capableFNc                    sT   |r|g|R i || _ n|i || _ || _d | _| jrPt | | d S r   )_innerget_response_call_methodr=   super__init__)selfr?   r$   r%   )SentryWrappingMiddleware	__class__
middlewarer   r   rB      s    z;_wrap_middleware.<locals>.SentryWrappingMiddleware.__init__c                    s0   |dvrt  t| j|} |}|| j|< |S )N)process_requestZprocess_viewZprocess_template_responseprocess_responseZprocess_exception)AttributeErrorr(   r>   __dict__)rC   method_namer3   r    )r<   r   r   __getattr__   s    
z>_wrap_middleware.<locals>.SentryWrappingMiddleware.__getattr__c                    s   t | dr"|  r"| j|i |S | j}|d u r>| jj | _} |d}|d u r^||i |S | ||i |W  d    S 1 s0    Y  d S )Nasync_route_checkr;   )hasattrrM   Z	__acall__r@   r>   __call__)rC   r$   r%   fr4   r:   r   r   rO      s    
z;_wrap_middleware.<locals>.SentryWrappingMiddleware.__call__)N)	r.   
__module____qualname__r(   r=   rB   rL   rO   __classcell__r   )rD   r6   r<   rF   )rE   r   rD   }   s   rD   )r.   rQ   rR   )Zsentry_sdk.integrations.djangor-   r   rN   r*   r(   )rF   r5   attrr   )r-   rD   r6   r<   rF   r5   r   r   H   s    4
r   N)__doc__Zdjangor   ZDJANGO_VERSIONZ
sentry_sdkr   Zsentry_sdk._functoolsr   Zsentry_sdk._typesr   Zsentry_sdk.utilsr   r   r   typingr	   r
   r   r   Zsentry_sdk.tracingr   r   r   r)   r   Zasgir,   r   r   r   r   r   <module>   s.   
