
    tni                        d Z ddlmZ ddlmZ ddlZddlmZ ddl	m
Z
mZmZ ddlmZ er3d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                   Z e
d          Zedk    Zesd ZnddlmZ ddZdddeddfdZdS )z1
Create spans from Django middleware invocations
    )wraps)VERSIONN)OP)
ContextVartransaction_from_functioncapture_internal_exceptions)TYPE_CHECKING)Any)Callable)Optional)TypeVar)SpanF.)bound$import_string_should_wrap_middleware)      c                     t           S N)object)_s    f/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/django/middleware.py<lambda>r   $   s    v     r   )_asgi_middleware_mixin_factoryreturnc                      ddl m}  | j        dt          ddffd}|| _        | j        j        d
fd	}|| j        _        d S )Nr   )basedotted_pathr   r
   c                 r     |           }t                               d           rt          ||           }|S r   )%_import_string_should_wrap_middlewareget_wrap_middleware)r   rvold_import_strings     r   sentry_patched_import_stringz>patch_django_middlewares.<locals>.sentry_patched_import_string.   s=    {++044T:: 	3!"k22B	r   argskwargsc                      t                               d           	  | i |t                               d           S # t                               d           w xY w)NTF)r!   set)r'   r(   old_load_middlewares     r   sentry_patched_load_middlewarez@patch_django_middlewares.<locals>.sentry_patched_load_middleware:   sa    -11$777	=&&777155e<<<<155e<<<<s	   ? Ar'   r
   r(   r
   r   r
   )django.core.handlersr   import_stringstrBaseHandlerload_middleware)r   r&   r,   r%   r+   s      @@r   patch_django_middlewaresr3   )   s    ))))))*# %       6D*:= = = = = = (FD$$$r   
middlewarer
   middleware_namec           	           ddl m dfddfd	 G  fd
dt                              }dD ]1}t           |          rt	          ||t           |                     2|S )Nr   )DjangoIntegration
old_methodCallable[..., Any]r   Optional[Span]c                    t          j                                                  }||j        sd S t	          |           }}t          | dd           }|rd                    ||          }t          j        t          j	        |j
                  }|                    d|           |                    d           |S )N__name__z{}.{})opnameoriginzdjango.function_namezdjango.middleware_name)
sentry_sdk
get_clientget_integrationmiddleware_spansr   getattrformat
start_spanr   MIDDLEWARE_DJANGOr?   set_tag)r8   integrationfunction_namedescriptionfunction_basenamemiddleware_spanr7   r5   s         r   _check_middleware_spanz0_wrap_middleware.<locals>._check_middleware_spanG   s     +--==>OPPk&B41*==%#J
DAA 	I!..6GHHK$/#$+
 
 

 	 6FFF 8/JJJr   r   c                      t                      5  d fd}	  t                     |          } j        |_        n# t          $ r Y nw xY w|cd d d            S # 1 swxY w Y    S )Nr'   r
   r(   r   c                  v               }| | i |S |5   | i |cd d d            S # 1 swxY w Y   d S r    )r'   r(   rM   rN   r8   s      r   sentry_wrapped_methodzL_wrap_middleware.<locals>._get_wrapped_method.<locals>.sentry_wrapped_method`   s    "8"8"D"D"*%:t6v666$ 7 7%:t6v667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   .22r-   )r   r   __self__	Exception)r8   rR   rN   s   ` r   _get_wrapped_methodz-_wrap_middleware.<locals>._get_wrapped_method]   s    (** 	) 	)7 7 7 7 7 7 7(9j(9(9:O(P(P% 2<1D%..    ))	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	) 	), s1   A$?A
A	AAAA!$A!c                        e Zd Z edd          Zeo edd          Z	 d	 	 	 	 	 	 	 d fdZdedd	ffdZ	dfdZ
 xZS )2_wrap_middleware.<locals>.SentryWrappingMiddlewaresync_capableTasync_capableFNget_responseOptional[Callable[..., Any]]r'   r
   r(   r   c                     |r |g|R i || _         n |i || _         || _        d | _        | j        r#t	                                          |           d S d S r   )_innerrZ   _call_methodrY   super__init__)selfrZ   r'   r(   	__class__r4   s       r   r`   z;_wrap_middleware.<locals>.SentryWrappingMiddleware.__init__~   s      :(jGGGGGG(j$9&99 ,D $D! /  ...../ /r   method_namec                     |dvrt                      t          | j        |          } |          }|| j        |<   |S )N)process_requestprocess_viewprocess_template_responseprocess_responseprocess_exception)AttributeErrorrD   r]   __dict__)ra   rc   r8   r$   rU   s       r   __getattr__z>_wrap_middleware.<locals>.SentryWrappingMiddleware.__getattr__   sU     #   %&&& k::J$$Z00B)+DM+&Ir   c                    t          | d          r!|                                 r | j        |i |S | j        }|| j        j        x| _        } |          }| ||i |S |5   ||i |cd d d            S # 1 swxY w Y   d S )Nasync_route_check)r8   )hasattrrn   	__acall__r^   r]   __call__)ra   r'   r(   frM   rN   s        r   rq   z;_wrap_middleware.<locals>.SentryWrappingMiddleware.__call__   s	   t011 7d6L6L6N6N 7%t~t6v666!Ay(,(<<!A44BBBO&q$)&)))  * *q$)&))* * * * * * * * * * * * * * * * * *s   'A<<B B r   )rZ   r[   r'   r
   r(   r
   r   Nr-   )r<   
__module____qualname__rD   rX    DJANGO_SUPPORTS_ASYNC_MIDDLEWARErY   r`   r0   rl   rq   __classcell__)rb   rN   rU   r4   s   @r   SentryWrappingMiddlewarerW   v   s         wz>4@@8 
WW>
 >
 <@	/8	/ 	/ 		/
 	/ 	/ 	/ 	/ 	/ 	/ 	/"	3 	5 	 	 	 	 	 		* 	* 	* 	* 	* 	* 	* 	* 	* 	*r   rw   )r<   rs   rt   )r8   r9   r   r:   )r8   r   r   r   )sentry_sdk.integrations.djangor7   r   ro   setattrrD   )r4   r5   rw   attrr7   rN   rU   s   ``  @@@r   r#   r#   D   s    @@@@@@      ,     26* 6* 6* 6* 6* 6* 6* 6* 6*&'=>>6* 6* 6*p O O
 :t$$ 	O,dGJ4M4MNNN##r   )r   N)__doc__	functoolsr   djangor   DJANGO_VERSIONr@   sentry_sdk.constsr   sentry_sdk.utilsr   r   r   typingr	   r
   r   r   r   sentry_sdk.tracingr   r   r!   ru   r   asgir3   r0   r#   rQ   r   r   <module>r      s          , , , , , ,                          !           /''''''8CH-...A(2
*) ) % $2V#;  ' 5%5%5""444444F F F F6r$ r$ r$ r$ r$ r$ r$ r$ r$r   