U
    \g%i†  ã                   @   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 ddd	d
h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ÚTrueÚFalseÚNoneÚprintÚargÚexecc              
   K   sf   zt  | d|¡W S  tk
r` } z2tjdt ¡ jjt ¡ | dd… f f|Ž|‚W 5 d}~X Y nX dS )zParse an expression into ASTz	<unknown>z(%s) %s (%r)r   é2   N)	r   ÚparseÚ	Exceptionr   ZSyntaxExceptionr   Zexception_asÚ	__class__Ú__name__)ÚcodeÚmodeÚexception_kwargsÚe© r   úL/var/www/html/api-medvista/venv/lib/python3.8/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 |¡ n| 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?   s    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 k	r|  |j ¡ |jd k	r,|  |j¡ |jD ]}|  |¡ q2d S r!   )r$   r%   Útyper*   Úbody©r   r'   Z	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   s    zFindIdentifiers.visit_Lambdac                 C   s   |   |j¡ |  |d¡ d S r   )r%   r$   r3   r&   r   r   r   Úvisit_FunctionDefY   s    z!FindIdentifiers.visit_FunctionDefc                 C   s:   | j r,|jD ]}|  |j¡ |  |j¡ qn
|  |¡ d S r!   ©r   Ú
generatorsr*   ÚtargetÚiterÚgeneric_visit©r   r'   Úcompr   r   r   Úvisit_ListComp]   s
    
zFindIdentifiers.visit_ListCompc                 C   s:   | j r,|jD ]}|  |j¡ |  |j¡ qn
|  |¡ d S r!   r7   r<   r   r   r   Úvisit_DictCompg   s
    
zFindIdentifiers.visit_DictCompc                 c   s.   |D ]$}t |tjƒr"|jE d H  q|V  qd S r!   )Ú
isinstanceÚ_astÚTupleÚelts)r   r4   r
   r   r   r   Ú_expand_tupleso   s    zFindIdentifiers._expand_tuplesc                 C   sj   | j }d| _ | j}| dd„ |  |jj¡D ƒ¡| _|rD|  |j¡ n|jD ]}|  |¡ qJ|| _ || _d S )NTc                 S   s   g | ]}t |ƒ‘qS r   ©Úarg_id©Ú.0r
   r   r   r   Ú
<listcomp>‚   s     z3FindIdentifiers._visit_function.<locals>.<listcomp>)r   r   ÚunionrD   r4   r*   r0   )r   r'   ÚislambdaÚinfr   r-   r   r   r   r3   v   s    ÿ
zFindIdentifiers._visit_functionc                 C   sH   |   |j¡ |   |j¡ |jD ]}|   |¡ q|jD ]}|   |¡ q4d S r!   )r*   r:   r9   r0   Zorelser1   r   r   r   Ú	visit_ForŒ   s    

zFindIdentifiers.visit_Forc                 C   sT   t |jtjƒr|  |j¡ n4|jtkrP|j| jjkrP|j| j	krP| jj
 |j¡ d S r!   )r@   ÚctxrA   ÚStorer%   ÚidÚreservedr   r"   r   Úundeclared_identifiersr#   r&   r   r   r   Ú
visit_Name–   s    ÿþ
ýzFindIdentifiers.visit_Namec                 C   s>   |j D ]2}|jd k	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   sN   |j D ]B}|jd k	r"|  |j¡ q|jdkr<tjd| jŽ‚q|  |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.)r[   )rU   rV   r%   r$   r   ZCompileExceptionr   rX   r   r   r   Úvisit_ImportFrom©   s    


 ÿûz FindIdentifiers.visit_ImportFromN)r   Ú
__module__Ú__qualname__r    r%   r(   r.   r2   r5   r6   r>   Zvisit_SetCompZvisit_GeneratorExpr?   rD   r3   rM   rS   rY   r\   r   r   r   r   r   1   s    
r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú	FindTuplec                 K   s   || _ || _|| _d S r!   )r   r   Úcode_factory)r   r   r`   r   r   r   r   r    º   s    zFindTuple.__init__c                 C   st   |j D ]h}| j|f| jŽ}| jj |¡ | jj t|ƒ ¡ ¡ | jj	}| 
|j	¡| j_	| jj}| 
|j¡| j_qd S r!   )rC   r`   r   r   ZcodeargsÚappendr4   ÚExpressionGeneratorr+   r"   rJ   rR   )r   r'   r-   ÚpZldiZluir   r   r   Úvisit_Tuple¿   s    
ÿÿzFindTuple.visit_TupleN)r   r]   r^   r    rd   r   r   r   r   r_   ¹   s   r_   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú	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r4| |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   s   g | ]}t |ƒ‘qS r   rE   rG   r   r   r   rI   Ö   s     z/ParseFunc.visit_FunctionDef.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS r   rE   rG   r   r   r   rI   Ú   s     )r$   r   Úfuncnamer4   Úvarargra   r
   Ú
kwonlyargsÚkwargÚargnamesÚdefaultsÚ
kwargnamesÚkw_defaultsÚ
kwdefaultsÚvarargsÚkwargs)r   r'   rj   rl   r   r   r   r6   Ó   s    
zParseFunc.visit_FunctionDefN)r   r]   r^   r    r6   r   r   r   r   re   Î   s   re   c                   @   s   e Zd Zdd„ Zdd„ ZdS )rb   c                 C   s   t  d¡| _| j |¡ d S )Nz    )r   ZSourceGeneratorÚ	generatorr*   )r   Zastnoder   r   r   r    æ   s    zExpressionGenerator.__init__c                 C   s   d  | jj¡S )NÚ )Újoinrq   Úresult)r   r   r   r   r+   ê   s    zExpressionGenerator.valueN)r   r]   r^   r    r+   r   r   r   r   rb   å   s   rb   )r   )Ú__doc__ÚoperatorrA   Úmakor   r   r   r   rQ   Ú
attrgetterrF   Zrestore__astr   ÚNodeVisitorr   r_   re   rb   r   r   r   r   Ú<module>   s   


 	