
    +h                     2   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ h dZ ej                  d      Z
 ej                  e       dd	Z G d
 dej                        Z G d dej                        Z G d dej                        Z G d d      Zy)zyHandles parsing of Python code.

Parsing to AST is done via _ast on Python > 2.5, otherwise the compiler
module is used.
    N)	_ast_util)compat)
exceptions)util>   NoneTrueFalseprintargc                    	 t        j                  | d|      S # t        $ ra}t        j                  dt        j                         j                  j                  dt        j                         d| dd dfi ||d}~ww xY w)	zParse an expression into ASTz	<unknown>(z) z (r   2   )N)	r   parse	Exceptionr   SyntaxExceptionr   exception_as	__class____name__)codemodeexception_kwargses       @/var/www/html/venv/lib/python3.12/site-packages/mako/pyparser.pyr   r       s    t[$77 	(( ##%//88##%Qr
	
 
 		s    	BAA>>Bc                   n    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
e
xZZd	 Zd
 Zd Zd Zd Zd Zd Zy)FindIdentifiersc                 Z    d| _         d| _        t               | _        || _        || _        y NF)in_functionin_assign_targetssetlocal_ident_stacklistenerr   selfr#   r   s      r   __init__zFindIdentifiers.__init__2   s+     !&!$  0    c                     | j                   s&| j                  j                  j                  |       y | j                  j                  |       y N)r   r#   declared_identifiersaddr"   )r%   names     r   _add_declaredzFindIdentifiers._add_declared9   s7    MM..2248""&&t,r'   c                 :    | j                  |j                         y r)   )r-   r,   r%   nodes     r   visit_ClassDefzFindIdentifiers.visit_ClassDef?   s    499%r'   c                     | j                  |j                         | j                  }d| _        |j                  D ]  }| j                  |        || _        y NT)visitvaluer    targets)r%   r0   in_ans       r   visit_AssignzFindIdentifiers.visit_AssignB   sM    
 	

4::%%!% 	AJJqM	!%r'   c                     |j                   | j                  |j                          |j                  | j                  |j                         |j                  D ]  }| j                  |        y r)   )r,   r-   typer4   bodyr%   r0   	statements      r   visit_ExceptHandlerz#FindIdentifiers.visit_ExceptHandlerN   sW    99 tyy)99 JJtyy! 	"IJJy!	"r'   c                 (    | j                  |d       y r3   )_visit_function)r%   r0   argss      r   visit_LambdazFindIdentifiers.visit_LambdaV   s    T4(r'   c                 ^    | j                  |j                         | j                  |d       y r   )r-   r,   rA   r/   s     r   visit_FunctionDefz!FindIdentifiers.visit_FunctionDefY   s$    499%T5)r'   c                     | j                   rH|j                  D ]8  }| j                  |j                         | j                  |j                         : y | j                  |       y r)   r   
generatorsr4   targetitergeneric_visitr%   r0   comps      r   visit_ListCompzFindIdentifiers.visit_ListComp]   N     &

4;;'

499%& t$r'   c                     | j                   rH|j                  D ]8  }| j                  |j                         | j                  |j                         : y | j                  |       y r)   rG   rL   s      r   visit_DictCompzFindIdentifiers.visit_DictCompg   rO   r'   c              #      K   |D ]5  }t        |t        j                        r|j                  E d {    2| 7 y 7 wr)   )
isinstance_astTupleelts)r%   rB   r   s      r   _expand_tupleszFindIdentifiers._expand_tupleso   s8      	C#tzz*88##			#s   /A >A c                    | j                   }d| _         | j                  }|j                  | j                  |j                  j                        D cg c]  }t        |       c}      | _        |r| j                  |j                         n"|j                  D ]  }| j                  |        || _         || _        y c c}w r3   )r   r"   unionrW   rB   arg_idr4   r<   )r%   r0   islambdainfr"   r   r8   s          r   rA   zFindIdentifiers._visit_functionv   s      22!2!8!8$($7$7		$GHSVC[H"
 JJtyy!YY 

1!2 Is   B?c                     | j                  |j                         | j                  |j                         |j                  D ]  }| j                  |        |j                  D ]  }| j                  |        y r)   )r4   rJ   rI   r<   orelser=   s      r   	visit_ForzFindIdentifiers.visit_For   sb     	

499

4;; 	"IJJy!	" 	"IJJy!	"r'   c                    t        |j                  t        j                        r| j	                  |j
                         y |j
                  t        vrl|j
                  | j                  j                  vrI|j
                  | j                  vr0| j                  j                  j                  |j
                         y y y y r)   )rS   ctxrT   Storer-   idreservedr#   r*   r"   undeclared_identifiersr+   r/   s     r   
visit_NamezFindIdentifiers.visit_Name   s    dhh

+ tww'GG8#t}}AAAt555MM0044TWW= 6 B $r'   c                     |j                   D ]W  }|j                  | j                  |j                         +| j                  |j                  j	                  d      d          Y y )N.r   )namesasnamer-   r,   splitr%   r0   r,   s      r   visit_ImportzFindIdentifiers.visit_Import   sQ    JJ 	<D{{&""4;;/""499??3#7#:;		<r'   c                 
   |j                   D ]t  }|j                  | j                  |j                         +|j                  dk(  r t	        j
                  	 di | j                  | j                  |j                         v y )N*)z'import *' is not supported, since all identifier names must be explicitly declared.  Please use the form 'from <modulename> import <name1>, <name2>, ...' instead.)ri   rj   r-   r,   r   CompileExceptionr   rl   s      r   visit_ImportFromz FindIdentifiers.visit_ImportFrom   sy    JJ 	.D{{&""4;;/c! 11$
 ++  ""499-	.r'   N)r   
__module____qualname__r&   r-   r1   r9   r?   rC   rE   rN   visit_SetCompvisit_GeneratorExprQ   rW   rA   r_   rf   rm   rq    r'   r   r   r   1   sZ    1-&
&")*% *87M&%3,"
><.r'   r   c                       e Zd Zd Zd Zy)	FindTuplec                 .    || _         || _        || _        y r)   )r#   r   code_factory)r%   r#   rz   r   s       r   r&   zFindTuple.__init__   s      0(r'   c                 &   |j                   D ]  } | j                  |fi | j                  }| j                  j                  j                  |       | j                  j                  j                  t        |      j                                | j                  j                  }|j                  |j                        | j                  _	        | j                  j                  }|j                  |j                        | j                  _         y r)   )rV   rz   r   r#   codeargsappendrB   ExpressionGeneratorr5   r*   rY   re   )r%   r0   r8   pldiluis         r   visit_TuplezFindTuple.visit_Tuple   s     	A!!!!=t'<'<=AMM""))!,MM%%&9!&<&B&B&DE--44C14&&2DMM. --66C3699((4DMM0	r'   N)r   rr   rs   r&   r   rv   r'   r   rx   rx      s    )
r'   rx   c                       e Zd Zd Zd Zy)	ParseFuncc                      || _         || _        y r)   )r#   r   r$   s      r   r&   zParseFunc.__init__   s      0r'   c                 ~   |j                   | j                  _        |j                  j                  D cg c]  }t	        |       }}|j                  j
                  r/|j                  |j                  j
                  j                         |j                  j                  D cg c]  }t	        |       }}|j                  j                  r/|j                  |j                  j                  j                         || j                  _
        |j                  j                  | j                  _        || j                  _        |j                  j                  | j                  _        |j                  j
                  | j                  _        |j                  j                  | j                  _        y c c}w c c}w r)   )r,   r#   funcnamerB   rZ   varargr}   r   
kwonlyargskwargargnamesdefaults
kwargnameskw_defaults
kwdefaultsvarargskwargs)r%   r0   r   r   r   s        r   rE   zParseFunc.visit_FunctionDef   s   !%+/99>>:CF3K::99OODII,,001-1YY-A-ABcfSkB
B99??diioo112!)!%!3!3#- #'99#8#8  $		 0 0#yy ; Cs   F5%F:N)r   rr   rs   r&   rE   rv   r'   r   r   r      s    1/r'   r   c                       e Zd Zd Zd Zy)r~   c                 n    t        j                  d      | _        | j                  j                  |       y )Nz    )r   SourceGenerator	generatorr4   )r%   astnodes     r   r&   zExpressionGenerator.__init__   s&    "227;W%r'   c                 L    dj                  | j                  j                        S )N )joinr   result)r%   s    r   r5   zExpressionGenerator.value   s    wwt~~,,--r'   N)r   rr   rs   r&   r5   rv   r'   r   r~   r~      s    &.r'   r~   )exec)__doc__operatorrT   makor   r   r   r   rd   
attrgetterrZ   restore__astr   NodeVisitorr   rx   r   r~   rv   r'   r   <module>r      s          . 
		U	#   $ "E.i++ E.P	%% */	%% /.. .r'   