o
    7 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>   FalseNoneTrue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   U/var/www/html/figdemos/bartoux_crm/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)   Z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&   r7   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=   rB   r   r   r   visit_DictCompg   rE   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!   r8   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   unionrK   r8   r-   r3   )r!   r)   islambdainfr   r0   r   r   r   r7   v   s   

zFindIdentifiers._visit_functionc                 C   sH   |  |j |  |j |jD ]}|  | q|jD ]}|  | qd S r#   )r-   r@   r?   r3   orelser4   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#   )rG   ctxrH   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.)re   )r_   r`   r'   r&   r   CompileExceptionr   rb   r   r   r   visit_ImportFrom   s   


z FindIdentifiers.visit_ImportFromN)r   
__module____qualname__r"   r'   r*   r1   r6   r9   r:   rD   visit_SetCompvisit_GeneratorExprF   rK   r7   rW   r]   rc   rg   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   rn   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#   )rJ   rn   r   r   codeargsappendr8   ExpressionGeneratorr.   r$   rS   r\   )r!   r)   r0   pZldiZluir   r   r   visit_Tuple   s   

zFindTuple.visit_TupleN)r   rh   ri   r"   rs   r   r   r   r   rm      s    rm   c                   @   rl   )	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   rL   r   rM   rO   r   r   r   rQ      rR   z/ParseFunc.visit_FunctionDef.<locals>.<listcomp>c                 S   rL   r   rM   rO   r   r   r   rQ      rR   )r&   r   funcnamer8   varargrp   r
   
kwonlyargskwargargnamesdefaults
kwargnameskw_defaults
kwdefaultsvarargskwargs)r!   r)   ry   r{   r   r   r   r:      s   
zParseFunc.visit_FunctionDefN)r   rh   ri   r"   r:   r   r   r   r   rt          rt   c                   @   rl   )rq   c                 C   s   t d| _| j| d S )Nz    )r   ZSourceGenerator	generatorr-   )r!   Z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   rh   ri   r"   r.   r   r   r   r   rq      r   rq   )r   )__doc__operatorrH   makor   r   r   r   r[   
attrgetterrN   restore__astr   NodeVisitorr   rm   rt   rq   r   r   r   r   <module>   s    


 	