
    "eJ                        d dl mZmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZ  G d	 d
e      Z G d de      Zd0dZd Zd Zd Zd Zd Zd Zd ZedfdZd Zd Z d Z!d Z" G d de#      Z$ G d de#      Z%d Z&d  Z'd! Z(d" Z)d# Z*d$ Z+d% Z,d& Z-d' Z.d( Z/d) Z0d* Z1d+ Z2d, Z3d- Z4d. Z5d/ Z6y)1    )STATE_SUSPENDJINJA2_SUSPEND)CMD_SET_BREAKCMD_ADD_EXCEPTION_BREAK)canonical_normalized_path)add_exception_to_frameFCode)	pydev_log) LineBreakpointWithLazyValidationValidationInfo)	overrides)	PyDevdAPIc                       e Zd ZddZd Zy)Jinja2LineBreakpointNc	           
      L    || _         t        j                  | |||||||       y )Nhit_conditionis_logpoint)canonical_normalized_filenamer   __init__)	selfr   breakpoint_idline	condition	func_name
expressionr   r   s	            =/usr/lib/python3/dist-packages/pydevd_plugins/jinja2_debug.pyr   zJinja2LineBreakpoint.__init__   s5    -J*(11$tYXacm  ~K  Yd  	e    c                 8    d| j                   | j                  fz  S )NzJinja2LineBreakpoint: %s-%d)r   r   )r   s    r   __str__zJinja2LineBreakpoint.__str__   s    ,0R0RTXT]T]/^^^r   NF)__name__
__module____qualname__r   r     r   r   r   r      s    e_r   r   c                   <    e Zd Z eej
                        d        Zy)_Jinja2ValidationInfoc                 T    t        |      }|s
t               S t        d |D              S )Nc              3   &   K   | ]	  }|d      yw)r   Nr%   ).0xs     r   	<genexpr>zR_Jinja2ValidationInfo._collect_valid_lines_in_template_uncached.<locals>.<genexpr>   s     0A1Q40s   )_get_frame_lineno_mappingset)r   templatelineno_mappings      r   )_collect_valid_lines_in_template_uncachedz?_Jinja2ValidationInfo._collect_valid_lines_in_template_uncached   s'    28<5L0000r   N)r"   r#   r$   r   r   r1   r%   r   r   r'   r'      s     ~GGH1 I1r   r'   Nc           
          |dk(  r[t        |||||||	|
      }t        |d      st        |       t        j                  |_        ||_        ||_        ||j                  fS y )Njinja2-liner   jinja2_breakpoints)	r   hasattr_init_plugin_breaksr   ADD_BREAKPOINT_LAZY_VALIDATION
error_codeadd_breakpoint_resulton_changed_breakpoint_stater4   )pluginpydbtyper   r   r   r   r   r   r   r   r9   r:   jinja2_line_breakpoints                 r   add_line_breakpointr?       s    }!56SUbdhjsu~  AK  [h  vA  "Bt12%+4+S+S(7L4=X:%t'>'>>>r   c                     |j                  |      }|sy t        |d      st        |       |j                  j	                  |||       y )Njinja2_validation_info)getr5   r6   rA   -verify_breakpoints_from_template_cached_lines)r;   py_dbr   id_to_pybreakpointfile_to_line_to_breakpointsjinja2_breakpoints_for_files         r   after_breakpoints_consolidatedrH   .   sM    "="A"AB_"`&523E" 
  NN,.IKr   c                 \    |dk(  r't        |d      st        |       d|j                  |<   yy)Njinja2jinja2_exception_breakTF)r5   r6   rK   r;   r<   r=   	exceptions       r   add_exception_breakpointrN   <   s3    xt56%15##I.r   c                 >    i | _         i | _        t               | _        y N)rK   r4   r'   rA   )r<   s    r   r6   r6   E   s    "$D D"7"9Dr   c                 ,    t        |d      ri |_        yy)NrK   TF)r5   rK   )r;   r<   s     r    remove_all_exception_breakpointsrR   L   s    t-.&(#r   c                 :    |dk(  r	 |j                   |= yy#  Y yxY w)NrJ   TF)rK   rL   s       r   remove_exception_breakpointrT   S   s2    x	++I6 	s    c                 &    |dk(  r|j                   S y )Nr3   )r4   )r;   r<   r=   s      r   get_breakpointsrV   ]   s    }&&&r   c                     	 | j                   j                  }d| j                  v r|dv s|j                  d      ryy#  t	        j
                          Y yxY w)N__jinja_template__)rootloopmacroblock_TF)f_codeco_name	f_globals
startswithr
   rM   )framenames     r   _is_jinja2_render_callrc   c   sU    ||##5??2t?X7X\`\k\klt\us	   9= Ac                     t        |      }|j                  y | j                  ||       t        |j                  _        |t        k(  r|rt        |      }||j                  _        |S rP   )	Jinja2TemplateFramef_linenoset_suspendr   additional_infosuspend_typer   strpydev_message)r<   threadra   cmdmessages        r   _suspend_jinja2ro   n   s_    &E~~VS!*8F'
%%'lG/6,Lr   c                 <    | j                   j                  t        k(  S rP   )rh   ri   r   )rl   s    r   _is_jinja2_suspendedrq      s    !!...@@r   c                     d| j                   v S )N_Context__obj)f_localsra   s    r   _is_jinja2_context_callrv      s    enn,,r   c                 l    d| j                   v xr% | j                   d   j                  j                  dv S )Nr   )LoopContextTemplateReferenceMacroBlockReference)rt   	__class__r"   ru   s    r   _is_jinja2_internal_functionr}      s:    U^^# Hv(>(H(H(Q(QG)H Hr   c                 T    | %t        |       s| j                  } | t        |       s| S rP   )rc   f_backru   s    r   _find_jinja2_render_framer      s0    

$:5$A 
$:5$A Lr   c                   *    e Zd ZdZddZd Zd Zd Zy)re   TNc                    |t        |      }|t        |      }d | _        d|j                  v r|j                  d   | _        t	        d|      | _        || _        || _        i | _        | j                  |      | _        d | _
        y )Ncontextr/   )&_get_jinja2_template_original_filename_get_jinja2_template_lineback_contextrt   r	   r]   rf   r   r_   collect_contextf_trace)r   ra   original_filenametemplate_linenos       r   r   zJinja2TemplateFrame.__init__   s    $ Fu M"7>O & %y 9DJ(9:',,U3r   c                 t    |j                  d      }t        |      dkD  r|d   j                         r|d   S |S )N_   r   )splitlenisdigit)r   	orig_namepartss      r   _get_real_var_namez&Jinja2TemplateFrame._get_real_var_name   s9    $u:>eAh..08Or   c                 .   i }|j                   j                         D ]B  \  }}|j                  d      s|||<   |s t        |      r,||| j	                  |dd        <   D | j
                  '| j
                  j                         D ]
  \  }}|||<    |S )Nl_   )rt   itemsr`   _is_missingr   r   )r   ra   reskvs        r   r   z#Jinja2TemplateFrame.collect_context   s    NN((* 	8DAq<<%A;q>67D++AabE23		8
 ())//1 1A
r   c                    d}d|j                   v rl||j                   d   j                  v r|| j                  j                  |<   d}||j                   d   j                  v r|| j                  j                  |<   d}d|z   }||j                   v r;|r)| j                  j	                  |      |j                   |<   y ||j                   |<   y y )NFr   Tr   )rt   parentr   varsresolve)r   ra   rb   valuein_vars_or_parentsl_names         r   _change_variablez$Jinja2TemplateFrame._change_variable   s    "&u~~i077716!!((.%)"u~~i0555/4!!&&t,%)"U^^#!)-):):)B)B4)Hv&).v&	 $r   )NN)r"   r#   r$   IS_PLUGIN_FRAMEr   r   r   r   r%   r   r   re   re      s    O&
/r   re   c                       e Zd ZdZd Zy)Jinja2TemplateSyntaxErrorFrameTc                 r    t        d||      | _        || _        || _        i | _        || _        d | _        y )NzJinja2 )r	   r]   rf   r   r_   rt   r   )r   ra   exception_cls_namefilenamelinenort   s         r   r   z'Jinja2TemplateSyntaxErrorFrame.__init__   s7    +=?J r   N)r"   r#   r$   r   r   r%   r   r   r   r      s    Or   r   c                     t        |t              r@t        ||j                  |j                        }|j                  |j                  ||       |S yr!   )
isinstancere   evalr_   rt   r   r   )r;   ra   attrr   results        r   change_variabler      sA    %,-j%//5>>Bu||T6:r   c                 8    | j                   j                  dk(  ryy)NMissingTypeTF)r|   r"   )items    r   r   r      s    ~~-/r   c                 x   | }	 d| j                   v r?| j                   d   j                  j                  dk(  r| j                  j                  dk(  s`| j
                  } | |S d| j                   v s| j                   d   j                  j                  dk(  sF| j                  j                  dk(  s`| S #  |cY S xY w)Nr   Templaterender)rt   r|   r"   r]   r^   r   )ra   	old_frames     r   _find_render_function_framer      s    IU^^+v0F0P0P0Y0Y]g0g$||33x?LLE}  	 U^^+v0F0P0P0Y0Y]g0g$||33x? s$   AB3 !B3 0&B3 B3 1B3 3B9c                 X    | j                   }|j                  d      }|y t        |      S NrX   )r_   rB   r-   )ra   frame_globalsjinja_templates      r   _get_jinja2_template_debug_infor      s0    OOM"&&';<N$^44r   c                 8    | j                   }|sy| j                  S )zX
    :rtype: list(tuple(int,int))
    :return: list((original_line, line_in_frame))
    N)_debug_info
debug_info)r   r   s     r   r-   r-     s#     !,,K $$$r   c                 d    t        |       }|y | j                  }|D ]  }|d   |k(  s|d   c S  y )Nr   r   )r   rf   )ra   r   r   pairs       r   r   r     sG    07J^^F 7f7N r   c                     | S rP   r%   )ss    r   _convert_to_strr   '  s    Hr   c                 d    d| j                   v r"t        | j                   d   j                        S y r   )r_   r   r   ru   s    r   r   r   +  s,    u.u/CDMMNNr   c                 J    t        | j                  j                        dkD  ryyNr   TF)r   main_debuggerrK   )r;   s    r   has_exception_breaksr   6  s!    
6667!;r   c                 |    | j                   j                  j                         D ]  \  }}t        |      dkD  s y yr   )r   r4   r   r   )r;   _canonical_normalized_filenamebreakpointss      r   has_line_breaksr   <  sA    7=7K7K7^7^7d7d7f 3&{a r   c                    |j                   rAt        |      r6t        |      }|)t        |      }|j                   j	                  |      }|ry|j
                  ri|j                  j                  }|dv s|j                  d      r>|j                  }d}||j                  j	                  dd      }|j                  d      ryy)NFr/   ztop-level template codez<module>block  r"   jinja2.T)r4   rc   r   r   rB   rK   r]   r^   r`   r   r_   )	r;   r<   ra   r   r   rG   rb   r   module_names	            r   can_skipr   C  s    #9%#@9%@,Eh,O)*.*A*A*E*EFc*d'*""||## FF$//ZbJc\\FK!$..22:rB%%i0r   c                    |d   }|d   }d}	d|d<   t        |      r]|dv xr t        |      |d<   |d   }	d}|j                  t        |      rd |_        nd}|dk(  rt	        |j
                        rd|_        |d	k(  rDt	        |j
                        r/|j                  |_        d |_        t        |j                  _	        d}||	fS )
Nr      Fjinja2_stop)callr   Tr   r   return)
rq   rc   pydev_call_from_jinja2r}   rv   r   pydev_step_stopr   rh   ri   
r;   r<   ra   eventargs	stop_infostopinforl   plugin_stops
             r   cmd_step_intor   [  s    7D!WFK$ImF##(,<#<#^AWX]A^	- .&&2+E2.2+ F?6u||D*+D'4U\\B#::&*#.<+
 r   c                 8   |d   }|d   }d}	d|d<   t        |      rd}|j                  0t        |      r!|dk(  r|j                  |_        |dv r||_        ||	fS |dk(  r#t        |      r|j                  |u r
d|d<   |d   }	|d	k(  r@||j                  u r2d
|j                  j                  vrt        |j                        |_        ||	fS |d	k(  rGt        |j                        r2d |_        t        |      |_        t        |j                  _
        d}||	fS ||	fS )Nr   r   Fr   r   )r   r   r   Tr   r   )rq   pydev_call_inside_jinja2rc   r   rt   r   rv   r   r   rh   ri   r   s
             r   cmd_step_overr   }  s?   7D!WFK$ImF#((0%e,F?49LLD1..49D1 [   )%0T5R5RV[5[/3Im,"+M":K D999gU\\MbMb>b4Mell4[D1[  H!8!F*.D',Ee,LD)2@F""/D$$ r   c                 t    |d   }|d   }d|v r*|d   r%t        ||||      }|r|j                  ||||       yy)Nr   r   r   TF)ro   do_wait_suspend)	r;   r<   ra   r   r   r   argstep_cmdrl   s	            r   r   r     sP    7D!WF	!i&>feX>  s;r   c                    |d   }|d   }|d   }d}|dk(  r|j                   t        k7  r|j                  rt        |      r|j                  j                  d      }	|	dd d |fS t        |      }
|
t        j                  d|
       t        |
      }|j                  j                  |      }|rS|j                  }|j                  ||||	       t        |      }|&|j                  |      }|t        ||
|      }d	|||fS dd d |fS )
Nr   r   r   rJ   r   rX   Fz"Jinja2 is rendering a template: %sT)pydev_stater   r4   rc   r_   rB   r   r
   debugr   rA   verify_breakpointsr   re   )r;   rD   
pydb_framera   r   r   	_filenamer   
break_typer   r   r   rG   rA   r   jinja2_breakpoint	new_frames                    r   get_breakpointr     s9   GEQI7DJ4++}<AYAY^tuz^{,,-AB!$j00B5I(OO@BST,EFW,X)*/*B*B*F*FGd*e'*).)E)E&&99%A^`{  ~L  M";E"B".(C(G(G(X%(4$7?PRa$b	#%6	:MM$j((r   c                 (    |dk(  rt        |||      S y )NrJ   )ro   )r;   r<   rl   ra   bp_types        r   suspendr     s    (tVU33r   c                    |d   }|d   }|\  }}}	|j                   rC|@t        |j                   j                               d   }
|j                  dv r@t	        |      }|r2t        |||t        |
      }|rt        ||||	f       ||_        |}d|fS y |j                  dv r|j                  j                  }|dv s|j                  d      r|j                  }||j                  j                  d	d
      }j                  d      rX|j                  |t               t        ||||	f       t        |j                   _        t%        |
      |j                   _        d|fS y )Nr   r   )UndefinedErrorTemplateNotFoundTemplatesNotFound)rn   T)TemplateSyntaxErrorTemplateAssertionErrorr   r   r"   r   r   )rK   listkeysr"   r   ro   r   r   r   r]   r^   r`   r_   rB   rg   r   rh   ri   rj   rk   )r;   r<   r   ra   r   r   rl   rM   r   traceexception_typerender_framesuspend_framerb   r   r   s                   r   exception_breakr    sh   7D!WF!Iue""y'<d99>>@A!D!\\4U;L /flLcm{ | *=9eU:ST+0M()E;&& # #TT<<''D JJdoo^fNg%"("2"2"6"6z2"FK)))4**63JK*59eU2KL:HF**7;>~;NF**8;&r   )NFNN)7_pydevd_bundle.pydevd_constantsr   r   _pydevd_bundle.pydevd_commr   r   pydevd_file_utilsr   !_pydevd_bundle.pydevd_frame_utilsr   r	   _pydev_bundler
   %pydevd_plugins.pydevd_line_validationr   r   _pydev_bundle.pydev_overrider   _pydevd_bundle.pydevd_apir   r   r'   r?   rH   rN   r6   rR   rT   rV   rc   ro   rq   rv   r}   r   objectre   r   r   r   r   r   r-   r   r   r   r   r   r   r   r   r   r   r   r  r%   r   r   <module>r     s    I M 7 K # b 2 /_; _1N 1K: .;D $A-H
9/& 9/x
V 
5%"0D&R)B"r   