o
    h                     @   s   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	dZ
ee dd
dZG dd dejZG dd dejZG dd dejZG dd dZdS )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argexecc              
   K   s\   zt | d|W S  ty- } ztjdt jjt | dd f fi ||d}~ww )zParse an expression into ASTz	<unknown>z(%s) %s (%r)r   2   N)	r   parse	Exceptionr   SyntaxExceptionr   exception_as	__class____name__)codemodeexception_kwargse r   a/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/mako/pyparser.pyr       s"   

r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
e
 ZZdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) FindIdentifiersc                 K   s$   d| _ d| _t | _|| _|| _d S NF)in_functionin_assign_targetssetlocal_ident_stacklistenerr   selfr   r   r   r   r   __init__2   s
   
zFindIdentifiers.__init__c                 C   s(   | j s| jj| d S | j| d S N)r   r   declared_identifiersaddr   )r!   namer   r   r   _add_declared9   s   zFindIdentifiers._add_declaredc                 C   s   |  |j d S r#   )r'   r&   r!   noder   r   r   visit_ClassDef?      zFindIdentifiers.visit_ClassDefc                 C   s8   |  |j | j}d| _|jD ]}|  | q|| _d S NT)visitvaluer   targets)r!   r)   in_anr   r   r   visit_AssignB   s   

zFindIdentifiers.visit_Assignc                 C   sF   |j d ur| |j  |jd ur| |j |jD ]}| | qd S r#   )r&   r'   typer-   bodyr!   r)   	statementr   r   r   visit_ExceptHandlerN   s   


z#FindIdentifiers.visit_ExceptHandlerc                 G   s   |  |d d S r,   )_visit_function)r!   r)   argsr   r   r   visit_LambdaV   r+   zFindIdentifiers.visit_Lambdac                 C   s   |  |j | |d d S r   )r'   r&   r8   r(   r   r   r   visit_FunctionDefY      z!FindIdentifiers.visit_FunctionDefc                 C   <   | j r|jD ]}| |j | |j qd S | | d S r#   r   
generatorsr-   targetitergeneric_visitr!   r)   compr   r   r   visit_ListComp]      
zFindIdentifiers.visit_ListCompc                 C   r=   r#   r>   rC   r   r   r   visit_DictCompg   rF   zFindIdentifiers.visit_DictCompc                 c   s0    |D ]}t |tjr|jE d H  q|V  qd S r#   )
isinstance_astTupleelts)r!   r9   r
   r   r   r   _expand_tupleso   s   zFindIdentifiers._expand_tuplesc                 C   sj   | j }d| _ | j}|dd | |jjD | _|r"| |j n|jD ]}| | q%|| _ || _d S )NTc                 S      g | ]}t |qS r   arg_id.0r
   r   r   r   
<listcomp>       z3FindIdentifiers._visit_function.<locals>.<listcomp>)r   r   unionrL   r9   r-   r4   )r!   r)   islambdainfr   r1   r   r   r   r8   v   s   

zFindIdentifiers._visit_functionc                 C   sH   |  |j |  |j |jD ]}|  | q|jD ]}|  | qd S r#   )r-   rA   r@   r4   orelser5   r   r   r   	visit_For   s   

zFindIdentifiers.visit_Forc                 C   sb   t |jtjr| |j d S |jtvr+|j| jjvr-|j| j	vr/| jj
|j d S d S d S d S r#   )rH   ctxrI   Storer'   idreservedr   r$   r   undeclared_identifiersr%   r(   r   r   r   
visit_Name   s   
zFindIdentifiers.visit_Namec                 C   s>   |j D ]}|jd ur| |j q| |jdd  qd S )N.r   )namesasnamer'   r&   splitr!   r)   r&   r   r   r   visit_Import   s
   

zFindIdentifiers.visit_Importc                 C   sR   |j D ]#}|jd ur| |j q|jdkr tj	di | j| |j qd S )N*'import *' is not supported, since all identifier names must be explicitly declared.  Please use the form 'from <modulename> import <name1>, <name2>, ...' instead.)rf   )r`   ra   r'   r&   r   CompileExceptionr   rc   r   r   r   visit_ImportFrom   s   


z FindIdentifiers.visit_ImportFromN)r   
__module____qualname__r"   r'   r*   r2   r7   r:   r;   rE   visit_SetCompvisit_GeneratorExprG   rL   r8   rX   r^   rd   rh   r   r   r   r   r   1   s"    
r   c                   @      e Zd Zdd Zdd ZdS )	FindTuplec                 K   s   || _ || _|| _d S r#   )r   r   code_factory)r!   r   ro   r   r   r   r   r"      s   
zFindTuple.__init__c                 C   sx   |j D ]6}| j|fi | j}| jj| | jjt|  | jj	}|
|j	| j_	| jj}|
|j| j_qd S r#   )rK   ro   r   r   codeargsappendr9   ExpressionGeneratorr.   r$   rT   r]   )r!   r)   r1   pldiluir   r   r   visit_Tuple   s   

zFindTuple.visit_TupleN)r   ri   rj   r"   rv   r   r   r   r   rn      s    rn   c                   @   rm   )	ParseFuncc                 K   s   || _ || _d S r#   )r   r   r    r   r   r   r"      s   
zParseFunc.__init__c                 C   s   |j | j_dd |jjD }|jjr||jjj dd |jjD }|jjr/||jjj || j_	|jj
| j_
|| j_|jj| j_|jj| j_|jj| j_d S )Nc                 S   rM   r   rN   rP   r   r   r   rR      rS   z/ParseFunc.visit_FunctionDef.<locals>.<listcomp>c                 S   rM   r   rN   rP   r   r   r   rR      rS   )r&   r   funcnamer9   varargrq   r
   
kwonlyargskwargargnamesdefaults
kwargnameskw_defaults
kwdefaultsvarargskwargs)r!   r)   r|   r~   r   r   r   r;      s   
zParseFunc.visit_FunctionDefN)r   ri   rj   r"   r;   r   r   r   r   rw          rw   c                   @   rm   )rr   c                 C   s   t d| _| j| d S )Nz    )r   SourceGenerator	generatorr-   )r!   astnoder   r   r   r"      r<   zExpressionGenerator.__init__c                 C   s   d | jjS )N )joinr   result)r!   r   r   r   r.      s   zExpressionGenerator.valueN)r   ri   rj   r"   r.   r   r   r   r   rr      r   rr   )r   )__doc__operatorrI   makor   r   r   r   r\   
attrgetterrO   restore__astr   NodeVisitorr   rn   rw   rr   r   r   r   r   <module>   s    


 	