o
    hy                     @   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 Z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   k/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sentry_sdk/integrations/django/middleware.py<lambda>$   s    r   r   )_asgi_middleware_mixin_factoryc                     sD   ddl m}  | j  fdd}|| _| 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_string/   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   import_stringBaseHandlerload_middleware)r   r!   r&   r   )r    r%   r   patch_django_middlewares)   s   	r+   c                    sl   ddl m   fddfddG fdddt}d	D ]}t|r3t||t| q#|S )
Nr   )DjangoIntegrationc                    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_DJANGOr0   set_tag)
old_methodintegrationfunction_namedescriptionfunction_basenamemiddleware_span)r,   middleware_namer   r   _check_middleware_spanK   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$   r?   )rA   r:   r   r   sentry_wrapped_methodf   s   $zL_wrap_middleware.<locals>._get_wrapped_method.<locals>.sentry_wrapped_method)r   r   __self__	Exception)r:   rB   rA   r:   r   _get_wrapped_methodb   s   
 z-_wrap_middleware.<locals>._get_wrapped_methodc                       sT   e Zd ZeddZeoeddZd fdd	Zfdd	Zfd
dZ	  Z
S )z2_wrap_middleware.<locals>.SentryWrappingMiddlewaresync_capableTasync_capableFNc                    sT   |r|g|R i || _ n|i || _ || _d | _| jr(t | d S d S r   )_innerget_response_call_methodrI   super__init__)selfrK   r#   r$   )	__class__
middlewarer   r   rN      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)AttributeErrorr5   rJ   __dict__)rO   method_namer:   r   )rG   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_checkrF   )hasattrr[   	__acall__rL   rJ   __call__)rO   r#   r$   fr?   rE   r   r   r^      s   
$z;_wrap_middleware.<locals>.SentryWrappingMiddleware.__call__r   )r-   
__module____qualname__r5   rH    DJANGO_SUPPORTS_ASYNC_MIDDLEWARErI   rN   rZ   r^   __classcell__r   )rA   rG   rQ   )rP   r   SentryWrappingMiddleware}   s    rd   )r-   r`   ra   )sentry_sdk.integrations.djangor,   r   r\   setattrr5   )rQ   r@   rd   attrr   )r,   rA   rG   rQ   r@   r   r   G   s   6
r   )__doc__	functoolsr   djangor   DJANGO_VERSIONr1   sentry_sdk.constsr   sentry_sdk.utilsr   r   r   typingr   r	   r
   r   r   sentry_sdk.tracingr   r   r   rb   r   asgir+   r   r   r   r   r   <module>   s.    
