o
    ZhA                     @   s   d dl mZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ erFd 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y]   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 )    )TemplateSyntaxError)	mark_safe)VERSION)
_functoolsHub)TYPE_CHECKING)OP)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   _/var/www/html/lang_env/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_description/   s
   r   c                     sx   ddl m}  ddlm  | jt fdd}|| _tdk r!d S dd l}|jj	t
d	 fdd	}||j_	d S )
Nr   )SimpleTemplateResponse)DjangoIntegrationc                    sp   t j}| d u r| S |jtjt| jd}|	d| j
 | W  d    S 1 s1w   Y  d S )Nopdescriptioncontext)r   currentget_integrationfget
start_spanr   TEMPLATE_RENDERr   r   set_dataZcontext_data)selfhubspan)r!   real_rendered_contentr   r   rendered_content?   s   
$z)patch_templates.<locals>.rendered_content)      c                    s   t j}| d u r| ||g|R i |S |pi }d|vr't| |d< |jtjt|d}|	d| | ||g|R i |W  d    S 1 sOw   Y  d S )NZsentry_trace_metar"   r%   )
r   r&   r'   r   Ztrace_propagation_metar)   r   r*   r   r+   )requestr   r%   argskwargsr-   r.   )r!   real_renderr   r   renderU   s   $zpatch_templates.<locals>.render)N)Zdjango.template.responser    Zsentry_sdk.integrations.djangor!   r0   propertyDJANGO_VERSIONZdjango.shortcutsZ	shortcutsr7   r   wraps)r    r0   djangor7   r   )r!   r6   r/   r   patch_templates8   s   r<   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linename<django template>Zsource_lines   T)filenamelinenopre_contextpost_contextcontext_lineZin_app)append)debugrC   rB   rD   rE   rF   ir=   r   r   r   r   k   s,   

r   c                 c   sD    dV  |  d}|dkr |d V  |  d|d }|dksd S d S )Nr   
r1   )find)template_sourcepr   r   r   _linebreak_iter   s   

rN   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 )NZloadnamer?   r   r@   rA   )rB   rC   rD   rE   rF   )getattrreload	enumeraterN   rG   )r   originstartendrB   rL   rC   ZuptorD   rE   rF   numnextr=   r   r   r   r      s:   


r   N)Zdjango.templater   Zdjango.utils.safestringr   r;   r   r9   Z
sentry_sdkr   r   Zsentry_sdk._typesr   Zsentry_sdk.constsr   typingr	   r
   r   r   r   Zdjango.template.baser   ImportErrorZdjango.template.loaderr   r   r   r<   r   rN   r   r   r   r   r   <module>   s.    	3 	