o
    ‹åg6  ã                   @   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   úI/var/www/html/flaskapp/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   ó0   | j r|jD ]}|  |j¡ qd S |  |¡ d S r#   ©r   Ú
generatorsr-   ÚiterÚgeneric_visit©r!   r)   Úcompr   r   r   Úvisit_ListComp]   ó
   
ÿzFindIdentifiers.visit_ListCompc                 C   r=   r#   r>   rB   r   r   r   Úvisit_DictCompf   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!   r9   r
   r   r   r   Ú_expand_tuplesm   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   r9   r-   r4   )r!   r)   ÚislambdaÚinfr   r1   r   r   r   r8   t   s   ÿ

zFindIdentifiers._visit_functionc                 C   sH   |   |j¡ |   |j¡ |jD ]}|   |¡ q|jD ]}|   |¡ qd S r#   )r-   r@   Útargetr4   Ú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#   )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.)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;   rD   Úvisit_SetCompÚvisit_GeneratorExprF   rK   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#   )rJ   ro   r   r   ÚcodeargsÚappendr9   ÚExpressionGeneratorr.   r$   rS   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   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   Ú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__ÚoperatorrH   Úmakor   r   r   r   r\   Ú
attrgetterrN   Úrestore__astr   ÚNodeVisitorr   rn   rw   rr   r   r   r   r   Ú<module>   s    


 