o
    hO                     @   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.)bound$import_string_should_wrap_middleware)      import_by_pathimport_string)   r   c                 C   s   t S N)object)_ r   l/var/www/html/aiguide_backend/venv/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)django.core.handlersr   getattrimport_string_namesetattrBaseHandlerload_middleware)r   r%   r*   r   )r$   r)   r   patch_django_middlewares+   s   
	r1   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   currentget_integrationmiddleware_spansr   r,   format
start_spanr   MIDDLEWARE_DJANGOset_tag)
old_methodhubintegrationfunction_namer5   function_basenamemiddleware_span)r2   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(   rB   )rD   r=   r   r   sentry_wrapped_methodg   s   $zL_wrap_middleware.<locals>._get_wrapped_method.<locals>.sentry_wrapped_method)r	   r   __self__	Exception)r=   rE   rD   r=   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_methodrK   super__init__)selfrM   r'   r(   )SentryWrappingMiddleware	__class__
middlewarer   r   rP      s   z;_wrap_middleware.<locals>.SentryWrappingMiddleware.__init__c                    s0   |dvrt  t| j|} |}|| j|< |S )N)process_requestprocess_viewprocess_template_responseprocess_responseprocess_exception)AttributeErrorr,   rL   __dict__)rQ   method_namer=   r#   )rJ   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_checkrI   )hasattrr^   	__acall__rN   rL   __call__)rQ   r'   r(   frB   rH   r   r   ra      s   
$z;_wrap_middleware.<locals>.SentryWrappingMiddleware.__call__r   )	r3   
__module____qualname__r,   rK   rP   r]   ra   __classcell__r   )rR   rD   rJ   rT   )rS   r   rR   ~   s
    rR   )r3   rc   rd   )sentry_sdk.integrations.djangor2   r   r_   r.   r,   )rT   rC   attrr   )r2   rR   rD   rJ   rT   rC   r   r!   I   s   3
r!   N)__doc__djangor   DJANGO_VERSION
sentry_sdkr   sentry_sdk._functoolsr   sentry_sdk._typesr   sentry_sdk.constsr   sentry_sdk.utilsr   r   r	   typingr
   r   r   r   sentry_sdk.tracingr   r   r   r-   r   asgir1   r!   r   r   r   r   <module>   s2    
