
    \j?                        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r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ZdedefdZddZddZdeddfdZ	 	 	 	 ddZy# e$ r	 d dlmZ Y 6w xY w)    N)TemplateSyntaxError)	mark_safe)VERSION)OP)ensure_integration_enabled)TYPE_CHECKING)Any)Dict)Optional)Iterator)Tuple)Origin)LoaderOriginreturnc                 @   t        | d      rt        | j                        S t        | d      rt        | j                        S t        | t              rLt        | d      r@| j                  }t        |t        t        f      rt        |d   t              rt        |      S y )Ntemplate_debugdjango_template_sourcesourcer   )hasattr_get_template_frame_from_debugr   _get_template_frame_from_sourcer   
isinstancer   r   tuplelistr   )	exc_valuer   s     R/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/django/templates.py!get_template_frame_from_exceptionr      s     y*+-i.F.FGG
 y23.,,
 	
 )01gi6R!!fudm,F1Iv1N26::    template_namec                 `    t        | t        t        f      r| rdj                  | d         S y | S )Nz	[{}, ...]r   )r   r   r   format)r   s    r   _get_template_name_descriptionr"   3   s6    -$/%%mA&677  r   c                     ddl m}  ddlm | j                  t
        t        j                        dddt        ffd              }|| _        t        dk  ry dd l
}|j                  j                  t        j                        t              	 dd	d
dt        ddddddddffd              }||j                  _        y )Nr   )SimpleTemplateResponse)DjangoIntegrationselfr$   r   c                    t        j                  t        j                  t	        | j
                        j                        5 }|j                  d| j                         j                  |       cd d d        S # 1 sw Y   y xY w)Nopnameorigincontext)

sentry_sdk
start_spanr   TEMPLATE_RENDERr"   r   r+   set_datacontext_datafget)r&   spanr%   real_rendered_contents     r   rendered_contentz)patch_templates.<locals>.rendered_contentA   so     ""!!/0B0BC$++
 	4 MM)T%6%67(--d3	4 	4 	4s   -A<<B)      requestzdjango.http.HttpRequestr   r,   Optional[Dict[str, Any]]argsr	   kwargszdjango.http.HttpResponsec                 R   |xs i }d|vr.t        t        j                         j                               |d<   t        j                  t
        j                  t        |      j                        5 }|j                  d|        | ||g|i |cd d d        S # 1 sw Y   y xY w)Nsentry_trace_metar(   r,   )
r   r-   get_current_scopetrace_propagation_metar.   r   r/   r"   r+   r0   )r8   r   r,   r:   r;   r3   r%   real_renders         r   renderzpatch_templates.<locals>.renderT   s     -Rg-+4,,.EEG,G'( ""!!/>$++
 	Q MM)W-wwPPP	Q 	Q 	Qs   3 BB&)N)django.template.responser$   sentry_sdk.integrations.djangor%   r5   propertyr   r2   strDJANGO_VERSIONdjango.shortcuts	shortcutsrA   	functoolswraps)r$   r5   djangorA   r%   r@   r4   s       @@@r   patch_templatesrL   ;   s    ?@2CC 13H3M3MN47 4C 4 O 4 /?+""))K__[! 1;? /3Q*QQ ,Q 	Q
 Q 
$Q @ "Q, %Fr   c                     | y | d   }| d   }|d}g }g }d }| d   D ]5  \  }}||k  r|j                  |       ||kD  r|j                  |       4|}7 |||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)debugrT   rS   rU   rV   rW   irN   s           r   r   r   o   s    }6]FV}H&KLL(  4v:t$Z%L  "23'$Ra($ r   template_sourcezIterator[int]c              #      K   d | j                  d      }|dk\  r#|dz    | j                  d|dz         }|dk\  r"y y w)Nr   
r6   )find)r\   ps     r   _linebreak_iterra      sJ     
GT"A
q&!e  q1u- q&s
   <AAc                 B   | sy | \  }\  }}t        |dd       }|d}|j                         }d }d}g }g }	d }
t        t        |            D ]@  \  }}||| }||k\  r
||k  r|}|}
n%||j	                  |       n|	j	                  |       |}B |
|y |||dd  |	d d |
dS )NloadnamerO   r   rQ   rR   )rS   rT   rU   rV   rW   )getattrreload	enumeratera   rY   )r   r+   startendrS   r\   rT   uptorU   rV   rW   numnextrN   s                 r   r   r      s     !FLUCvz40H&mmoOFDKLL?@ 
	TtD)D=SD[FL^t$%
 v~ "23'$Ra($ r   )r   zOptional[BaseException]r   r9   )r   N)rZ   Dict[str, Any]r   rl   )r   zTuple[Origin, Tuple[int, int]]r   r9   ) rI   django.templater   django.utils.safestringr   rK   r   rF   r-   sentry_sdk.constsr   sentry_sdk.utilsr   typingr   r	   r
   r   r   r   django.template.baser   ImportErrordjango.template.loaderr   r   rE   r"   rL   r   ra   r    r   r   <module>rv      s     / - ,    7  >+(.# # 1%h>.S ._ .&,&&  >=>s   A= =B
B