
    \j                         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r-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  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y)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    S/root/env/lib/python3.12/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                  _        y )	Nr   )basedotted_pathr   r
   c                 Z     |       }t         j                  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:!"k2B	r   c                      t         j                  d       	  | i |t         j                  d       S # t         j                  d       w xY w)NTF)r!   set)argskwargsold_load_middlewares     r   sentry_patched_load_middlewarez@patch_django_middlewares.<locals>.sentry_patched_load_middleware:   sA    -11$7	=&77155e<155e<s	   5 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   )   sW    )**# %  6D**::= (FD$r   
middlewarer
   middleware_namec           	           ddl m dfdd	fd G  fddt                    }dD ]&  }t         |      st	        ||t         |             ( |S )
Nr   )DjangoIntegrationc                 p   t        j                         j                        }||j                  sy t	        |       }}t        | dd       }|rdj                  ||      }t        j                  t        j                  |j                        }|j                  d|       |j                  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)
old_methodintegrationfunction_namedescriptionfunction_basenamemiddleware_spanr7   r5   s         r   _check_middleware_spanz0_wrap_middleware.<locals>._check_middleware_spanG   s     ++-==>OPk&B&B1*=%#J
DA!..6GHK$//##$++

 	 6F 8/Jr   c                      t               5  d fd}	  t               |      } j                  |_        |cd d d        S # t        $ r Y w xY w# 1 sw Y    S xY w)Nc                  h           }| | i |S |5   | i |cd d d        S # 1 sw Y   y xY wr    )r)   r*   rK   rL   rF   s      r   sentry_wrapped_methodzL_wrap_middleware.<locals>._get_wrapped_method.<locals>.sentry_wrapped_method`   sH    "8"D"*%t6v66$ 7%t6v67 7 7s   (1r-   )r   r   __self__	Exception)rF   rP   rL   s   ` r   _get_wrapped_methodz-_wrap_middleware.<locals>._get_wrapped_method]   sm    (* 	)7(9j(9:O(P% 2<1D1D%. ))	) 	)"  #	), s-   A"AA	AAAAAc                        e Zd Z eW dd      Zexr  eW 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_capableFr
   r   c                     |r |g|i || _         n |i || _         || _        d | _        | j                  rt        |   |       y y r   )_innerget_response_call_methodrW   super__init__)selfrZ   r)   r*   	__class__r4   s       r   r]   z;_wrap_middleware.<locals>.SentryWrappingMiddleware.__init__~   sZ     (GGG($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)AttributeErrorrA   rY   __dict__)r^   r`   rF   r$   rS   s       r   __getattr__z>_wrap_middleware.<locals>.SentryWrappingMiddleware.__getattr__   sH     #  %&& k:J$Z0B)+DMM+&Ir   c                    t        | d      r"| j                         r | j                  |i |S | j                  }|| j                  j
                  x| _        } |      }| ||i |S |5   ||i |cd d d        S # 1 sw Y   y xY w)Nasync_route_check)rF   )hasattrrk   	__acall__r[   rY   __call__)r^   r)   r*   frK   rL   s        r   rn   z;_wrap_middleware.<locals>.SentryWrappingMiddleware.__call__   s    t01d6L6L6N%t~~t6v66!!Ay(,(<(<<!A4BO&$)&))  *$)&)* * *s   0BBr   )rZ   zOptional[Callable[..., Any]]r)   r
   r*   r
   r   Nr-   )r9   
__module____qualname__rA   rV    DJANGO_SUPPORTS_ASYNC_MIDDLEWARErW   r]   r0   ri   rn   __classcell__)r_   rL   rS   r4   s   @r   SentryWrappingMiddlewarerU   v   sy     z>4@8 
W>
 <@	/8	/ 	/ 		/
 	/"	3 	5 		* 	*r   rt   )r9   rp   rq   )rF   zCallable[..., Any]r   zOptional[Span])rF   r   r   r   )sentry_sdk.integrations.djangor7   r   rl   setattrrA   )r4   r5   rt   attrr7   rL   rS   s   ``  @@@r   r#   r#   D   sd    @,26* 6*&'=>6*p O
 :t$,dGJ4MNO $#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!   rr   r   asgir3   r0   r#   rO   r   r   <module>r      s     ,     !'8CH-.A(2*) % $2V#;  '%5"4F6r$ r$ r$ r$r   