o
    S۷i?                     @   s(  d dl 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 erLd dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ zd dlmZ W n eyc   d dlmZ Y nw 				d&ddZdedefddZd'ddZd(ddZdeddfd d!Z	"	#		d)d$d%ZdS )*    N)TemplateSyntaxError)	mark_safe)VERSION)OP)ensure_integration_enabled)TYPE_CHECKING)Any)Dict)Optional)Iterator)Tuple)Origin)LoaderOrigin	exc_valueOptional[BaseException]returnOptional[Dict[str, Any]]c                 C   sj   t | dr
t| jS t | drt| jS t| tr3t | dr3| j}t|tt	fr3t|d t
r3t|S d S )Ntemplate_debugdjango_template_sourcesourcer   )hasattr_get_template_frame_from_debugr   _get_template_frame_from_sourcer   
isinstancer   r   tuplelistr   )r   r    r   ^/home/ubuntu/vllm_env/lib/python3.10/site-packages/sentry_sdk/integrations/django/templates.py!get_template_frame_from_exception   s   


r   template_namec                 C   s(   t | ttfr| rd| d S d S | S )Nz	[{}, ...]r   )r   r   r   format)r   r   r   r   _get_template_name_description3   s
   r!   c                     s   ddl m}  ddlm  | jtt jdddtf fdd}|| _t	d	k r,d S dd l
}|jjtt 	 dd
ddtddddddddf fdd}||j_d S )Nr   )SimpleTemplateResponse)DjangoIntegrationselfr"   r   c                    sV   t jtjt| j jd}|d| j 	| W  d    S 1 s$w   Y  d S )Nopnameorigincontext)

sentry_sdk
start_spanr   TEMPLATE_RENDERr!   r   r(   set_datacontext_datafget)r$   span)r#   real_rendered_contentr   r   rendered_contentA   s   $z)patch_templates.<locals>.rendered_content)      requestzdjango.http.HttpRequestr   r)   r   argsr   kwargszdjango.http.HttpResponsec                    s   |pi }d|vrt t  |d< tjtjt| jd}|	d| | ||g|R i |W  d    S 1 s<w   Y  d S )Nsentry_trace_metar%   r)   )
r   r*   get_current_scopetrace_propagation_metar+   r   r,   r!   r(   r-   )r5   r   r)   r6   r7   r0   )r#   real_renderr   r   renderT   s   

$zpatch_templates.<locals>.render)N)django.template.responser"   sentry_sdk.integrations.djangor#   r2   propertyr   r/   strDJANGO_VERSIONdjango.shortcuts	shortcutsr<   	functoolswraps)r"   r2   djangor<   r   )r#   r;   r1   r   patch_templates;   s8   
	rG   debugDict[str, Any]c                 C   s   | d u rd S | d }| d }|d u rd}g }g }d }| d D ]\}}||k r,| | q||kr6| | q|}q|||dd  |d d |ddS )	Nliner'   <django template>source_lines   T)filenamelinenopre_contextpost_contextcontext_linein_app)append)rH   rP   rO   rQ   rR   rS   irJ   r   r   r   r   o   s,   

r   template_sourcezIterator[int]c                 c   sD    dV  |  d}|dkr |d V  |  d|d }|dksd S d S )Nr   
r3   )find)rW   pr   r   r   _linebreak_iter   s   

r[   r   Tuple[Origin, Tuple[int, int]]c                 C   s   | sd S | \}\}}t |dd }|d u rd}| }d }d}g }g }	d }
tt|D ](\}}||| }||krA||krA|}|}
n|d u rK|| n|	| |}q*|
d u s[|d u r]d S |||dd  |	d d |
dS )NloadnamerK   r   rM   rN   )rO   rP   rQ   rR   rS   )getattrreload	enumerater[   rU   )r   r(   startendrO   rW   rP   uptorQ   rR   rS   numnextrJ   r   r   r   r      s:   


r   )r   r   r   r   )r   N)rH   rI   r   rI   )r   r\   r   r   ) rD   django.templater   django.utils.safestringr   rF   r   rA   r*   sentry_sdk.constsr   sentry_sdk.utilsr   typingr   r   r	   r
   r   r   django.template.baser   ImportErrordjango.template.loaderr   r   r@   r!   rG   r   r[   r   r   r   r   r   <module>   sB    


4