o
    h]                     @   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 Zdd Zdd Zdd Zdd Zdd ZdS )    N)TemplateSyntaxError)	mark_safe)VERSION)OP)ensure_integration_enabled)TYPE_CHECKING)Any)Dict)Optional)Iterator)Tuple)Origin)LoaderOriginc                 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   )	exc_valuer    r   j/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sentry_sdk/integrations/django/templates.py!get_template_frame_from_exception   s   


r   c                 C   s(   t | ttfr| rd| d S d S | S )Nz	[{}, ...]r   )r   r   r   format)template_namer   r   r   _get_template_name_description3   s
   r   c                     s   ddl m}  ddlm  | jtt j fdd}|| _tdk r'd S dd l	}|j
jtt d	 fdd	}||j
_d S )
Nr   )SimpleTemplateResponse)DjangoIntegrationc                    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)selfspan)r    real_rendered_contentr   r   rendered_contentC   s   $z)patch_templates.<locals>.rendered_content)      c                    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)   )requestr   r%   argskwargsr-   )r    real_renderr   r   renderW   s   
$zpatch_templates.<locals>.render)N)django.template.responser   sentry_sdk.integrations.djangor    r/   propertyr   r+   DJANGO_VERSIONdjango.shortcuts	shortcutsr9   	functoolswraps)r   r/   djangor9   r   )r    r8   r.   r   patch_templates<   s   

rC   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)debugrJ   rI   rK   rL   rM   irD   r   r   r   r   n   s,   

r   c                 c   sD    dV  |  d}|dkr |d V  |  d|d }|dksd S d S )Nr   
r0   )find)template_sourcepr   r   r   _linebreak_iter   s   

rV   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loadnamerE   r   rG   rH   )rI   rJ   rK   rL   rM   )getattrreload	enumeraterV   rO   )r   r$   startendrI   rT   rJ   uptorK   rL   rM   numnextrD   r   r   r   r      s:   


r   )r@   django.templater   django.utils.safestringr   rB   r   r=   r&   sentry_sdk.constsr   sentry_sdk.utilsr   typingr   r   r	   r
   r   r   django.template.baser   ImportErrordjango.template.loaderr   r   r   rC   r   rV   r   r   r   r   r   <module>   s2    	2 	