o
    i"                     @   s  U 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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 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eZeeejj Z!ee"d< de#de#defddZ$dede%e de&e#ef defddZ'dede%e de&e#ef defddZ(dede%e de&e#ef defdd Z)d!e*de#ddfd"d#Z+d!ede#ddfd$d%Z,dS )&    )iscoroutinefunction)
isfunction)FunctionType)Any)castN)_DjangoUserInfoRetriever)core)	COMPONENT)
get_logger)config)IntegrationConfig)get_argument_value)	func_name)
is_wrapped)is_wrapped_with)wrapconfig_djangomw_pathhookreturnc                    s:   d  dt dtt dtttf dtf fdd}|S )Nzdjango.middleware.funcargskwargsr   c                    sx   |d }t | d }t||dddd}tj d|ttji|d | |i |W  d    S 1 s5w   Y  d S )	Nr   .   requestToptionaldjango.middleware	span_nameresourcetagsr   )r   r   r   context_with_datar	   r   integration_name)r   r   r   selfr!   r   
event_namer    ^/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/django/middleware.pywrapped_middleware   s   	$z5traced_middleware_wrapper.<locals>.wrapped_middleware)r   tupler   dictstr)r   r   r*   r(   r&   r)   traced_middleware_wrapper   s   
,r.   r   r   r   c                 C   s   |d }t | d}t||dddd}tjdd|ttji|d	'}| |i |}|d
t|do=d|j	  ko;dk n   |W  d    S 1 sKw   Y  d S )Nr   z.process_exceptionr   r   Tr   z#django.middleware.process_exceptionr   r   should_set_tracebackstatus_codei  iX  )
r   r   r   r#   r	   r   r$   set_itemhasattrr0   )r   r   r   r%   r!   r   ctxrespr(   r(   r)   traced_process_exception6   s   ,$r5   c           	      C   s  |d }t | d}t||dddd}tjdd|ttji|d	 ze| |i |W tj}|d
krz>|rnt	|drIt	|j
drI|j
  |j
j}n|j
}t	|dr\t	|jdr\|jj}nd }td||||t||dtf W n ty   tjddd Y nw W  d    S tj}|d
krz@|rt	|drt	|j
dr|j
  |j
j}n|j
}t	|drt	|jdr|jj}nd }td||||t||dtf W w W w  ty   tjddd Y w w w 1 sw   Y  d S )Nr   z.process_requestr   r   Tr   z!django.middleware.process_requestr   r   disableduser_setupsessionsession_keyzdjango.process_request)credentialszKError while trying to trace Django AuthenticationMiddleware process_request)exc_info)r   r   r   r#   r	   r   r$   
asm_config_user_event_moder2   r7   r8   _wrappedr9   r:   dispatchr   	Exceptionlogdebug)	r   r   r   r%   r!   r   moderequest_userr:   r(   r(   r)   &traced_auth_middleware_process_requestN   s   










rF   c                    s   | |i | t  s S t| dr!t| dr!| j d| j nt| t r2 fdd}|S dtdtt dt	t
tf d	tffd
d}t sPt |S  S )N
__module____qualname__r   c                     sf   t | |dddd}tjddttji|d  | i |I d H W  d    S 1 s,w   Y  d S Nr   r   Tr   zdjango.middleware.funcr   r   r   r   r#   r	   r   r$   )r   r   r   
middlewarer!   r(   r)   traced_async_middleware_func   s   	$z?traced_middleware_factory.<locals>.traced_async_middleware_funcr   r   r   r   c                    s^   t ||dddd}tjdd ttji|d | |i |W  d    S 1 s(w   Y  d S rI   rJ   )r   r   r   r   )r!   r(   r)   traced_middleware_func   s   	$z9traced_middleware_factory.<locals>.traced_middleware_func)r   r2   rG   rH   r   r   r   r+   r   r,   r-   r   r   )r   r   r   rM   rN   r(   rK   r)   traced_middleware_factory   s   *
rO   mwc                 C   s   dD ]}t | |d }|rt|rt|st|t|| qt| drE|dkr3t| jts2t| jt nt	t
| j}t|sEt|t|d t| dr\t	t
| j}t|ts^t|t d S d S d S )N)process_responseprocess_viewprocess_template_response__call__process_requestz7django.contrib.auth.middleware.AuthenticationMiddlewareprocess_exception)getattrr   r   r   r.   r2   r   rU   rF   r   r   rV   r5   )rP   r   r   fnr(   r(   r)   wrap_middleware_class   s,   


rY   c                 C   s@   t | trt| | dS t| rt| tst| t dS dS dS )z
    Wraps a Django middleware class or function.

    :param mw: The middleware to wrap.
    :param mw_path: The import path of the middleware.
    N)
isinstancetyperY   r   r   rO   r   )rP   r   r(   r(   r)   wrap_middleware   s
   
r\   )-inspectr   r   typesr   typingr   r   ddtrace$ddtrace.contrib.internal.django.userr   ddtrace.internalr   ddtrace.internal.constantsr	   ddtrace.internal.loggerr
   ddtrace.internal.settings.asmr   r=   %ddtrace.internal.settings.integrationr   ddtrace.internal.utilsr    ddtrace.internal.utils.importlibr   ddtrace.internal.wrappingr   r   r   __name__rB   djangor   __annotations__r-   r.   r+   r,   r5   rF   rO   r[   rY   r\   r(   r(   r(   r)   <module>   s2    &&&28