o
    ZhO                     @   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 ddlmZmZmZ e	rTd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 r_dZndZedk rjd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)TYPE_CHECKING)OP)
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   `/var/www/html/lang_env/lib/python3.10/site-packages/sentry_sdk/integrations/django/middleware.py<lambda>&   s    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_string1   s   

z>patch_django_middlewares.<locals>.sentry_patched_import_stringc               	      s2   t d z | i |W t d S t d w )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|r4t|t| q$S )
Nr   )DjangoIntegrationc                    sv   t j}| }|d u s|jsd S t| }}t| dd }|r%d||}|jtj	|d}|
d| |
d |S )N__name__z{}.{})opdescriptionzdjango.function_namezdjango.middleware_name)r   currentZget_integrationZmiddleware_spansr   r(   formatZ
start_spanr   ZMIDDLEWARE_DJANGOZset_tag)
old_methodZhubZintegrationZfunction_namer0   Zfunction_basenamemiddleware_span)r-   middleware_namer   r   _check_middleware_spanM   s   
z0_wrap_middleware.<locals>._check_middleware_spanc              	      sh   t  '  fdd}zt |} j|_W n	 ty    Y nw |W  d    S 1 s-w   Y   S )Nc                     sT    }|d u r| i |S | | i |W  d    S 1 s#w   Y  d S r   r   )r$   r%   r4   )r6   r3   r   r   sentry_wrapped_methodg   s   $zL_wrap_middleware.<locals>._get_wrapped_method.<locals>.sentry_wrapped_method)r	   r   __self__	Exception)r3   r7   r6   r3   r   _get_wrapped_methodc   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                    sX   |r|g|R i || _ n|i || _ || _d | _| jr*t | | d S 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 sCw   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__r   )	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   I   s   3
r   N)__doc__djangor   ZDJANGO_VERSIONZ
sentry_sdkr   Zsentry_sdk._functoolsr   Zsentry_sdk._typesr   Zsentry_sdk.constsr   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>   s2    
