o
    i                     @   s   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rRd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Zesadd ZnddlmZ dddZdddeddfd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                 C   s   t S N)object)_ r   f/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/sentry_sdk/integrations/django/middleware.py<lambda>$   s    r   r   )_asgi_middleware_mixin_factoryreturnc                     sP   ddl m}  | j dtddf fdd}|| _| jjdfd
d}|| j_d S )Nr   )basedotted_pathr   r	   c                    s     | }t d rt|| }|S r   )%_import_string_should_wrap_middlewareget_wrap_middleware)r   rv)old_import_stringr   r   sentry_patched_import_string.   s   

z>patch_django_middlewares.<locals>.sentry_patched_import_stringargskwargsc               	      s2   t d z | i |W t d S t d w )NTF)r   set)r#   r$   )old_load_middlewarer   r   sentry_patched_load_middleware:   s   
z@patch_django_middlewares.<locals>.sentry_patched_load_middlewarer#   r	   r$   r	   r   r	   )django.core.handlersr   import_stringstrBaseHandlerload_middleware)r   r"   r'   r   )r!   r&   r   patch_django_middlewares)   s   r.   
middlewarer	   middleware_namec                    sp   ddl m  d fdddfd
dG fdddt}dD ]}t|r5t||t| q%|S )Nr   )DjangoIntegration
old_methodCallable[..., Any]r   Optional[Span]c                    sx   t   }|d u s|jsd S t| }}t| dd }|r$d||}t jtj	| j
d}|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_DJANGOr8   set_tag)r2   integrationfunction_namedescriptionfunction_basenamemiddleware_span)r1   r0   r   r   _check_middleware_spanG   s    z0_wrap_middleware.<locals>._check_middleware_spanr   c              	      sj   t  ( d fdd}zt |} j|_W n	 ty!   Y nw |W  d    S 1 s.w   Y   S )Nr#   r	   r$   r   c                     sT    }|d u r| i |S | | i |W  d    S 1 s#w   Y  d S r   r   )r#   r$   rF   )rG   r2   r   r   sentry_wrapped_method`   s   $zL_wrap_middleware.<locals>._get_wrapped_method.<locals>.sentry_wrapped_methodr(   )r   r   __self__	Exception)r2   rH   rG   r2   r   _get_wrapped_method]   s   	 z-_wrap_middleware.<locals>._get_wrapped_methodc                       sr   e Zd ZeddZeoeddZ	d					
				d fddZdedd	ffddZ	dfddZ
  ZS )z2_wrap_middleware.<locals>.SentryWrappingMiddlewaresync_capableTasync_capableFNget_responseOptional[Callable[..., Any]]r#   r	   r$   r   c                    sT   |r|g|R i || _ n|i || _ || _d | _| jr(t | d S d S r   )_innerrP   _call_methodrO   super__init__)selfrP   r#   r$   )	__class__r/   r   r   rU   ~   s   z;_wrap_middleware.<locals>.SentryWrappingMiddleware.__init__method_namec                    s0   |dvrt  t| j|} |}|| j|< |S )N)process_requestprocess_viewprocess_template_responseprocess_responseprocess_exception)AttributeErrorr=   rR   __dict__)rV   rX   r2   r    )rM   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_checkrL   )hasattrra   	__acall__rS   rR   __call__)rV   r#   r$   frF   rK   r   r   rd      s   
$z;_wrap_middleware.<locals>.SentryWrappingMiddleware.__call__r   )rP   rQ   r#   r	   r$   r	   r   Nr(   )r5   
__module____qualname__r=   rN    DJANGO_SUPPORTS_ASYNC_MIDDLEWARErO   rU   r+   r`   rd   __classcell__r   )rG   rM   r/   )rW   r   SentryWrappingMiddlewarev   s"    rj   )r5   rf   rg   )r2   r3   r   r4   )r2   r   r   r   )sentry_sdk.integrations.djangor1   r   rb   setattrr=   )r/   r0   rj   attrr   )r1   rG   rM   r/   r0   r   r   D   s   8
r   )r   N)__doc__	functoolsr   djangor   DJANGO_VERSIONr9   sentry_sdk.constsr   sentry_sdk.utilsr   r   r   typingr   r	   r
   r   r   sentry_sdk.tracingr   r   r   rh   r   asgir.   r+   r   r   r   r   r   <module>   s.    

