B
    `m                 @   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lm	Z	 ej
rredd	d
dgZedZnedd	d
g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e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)arg_stringnameTrueFalseNoneprintargidexecc          
   K   sT   yt | d|S  tk
rN   tjdt jjt | dd f f|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 r   U/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/mako/pyparser.pyr   )   s    
r   c               @   sz   e Zd Zdd Zdd Zdd Zdd Zejr6d	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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__;   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_declaredB   s    zFindIdentifiers._add_declaredc             C   s   |  |j d S )N)r#   r"   )r   noder   r   r   visit_ClassDefH   s    zFindIdentifiers.visit_ClassDefc             C   s<   |  |j | j}d| _x|jD ]}|  | q W || _d S )NT)visitvaluer   targets)r   r$   Zin_anr   r   r   visit_AssignK   s    zFindIdentifiers.visit_Assignc             C   sJ   |j d k	r| |j  |jd k	r,| |j x|jD ]}| | q4W d S )N)r"   r#   typer&   body)r   r$   	statementr   r   r   visit_ExceptHandler]   s    

z#FindIdentifiers.visit_ExceptHandlerc             G   s   |  |d d S )NT)_visit_function)r   r$   argsr   r   r   visit_Lambdae   s    zFindIdentifiers.visit_Lambdac             C   s   |  |j | |d d S )NF)r#   r"   r/   )r   r$   r   r   r   visit_FunctionDefh   s    z!FindIdentifiers.visit_FunctionDefc             c   s<   x6|D ].}t |tjr.x|jD ]
}|V  qW q|V  qW d S )N)
isinstance_astTupleelts)r   r0   r   r)   r   r   r   _expand_tuplesl   s
    
zFindIdentifiers._expand_tuplesc             C   sn   | j }d| _ | j}|dd | |jjD | _|rD| |j nx|jD ]}| | qLW || _ || _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   unionr7   r0   r&   r,   )r   r$   islambdainfr   r)   r   r   r   r/   t   s    zFindIdentifiers._visit_functionc             C   sP   |  |j |  |j x|jD ]}|  | q W x|jD ]}|  | q:W d S )N)r&   itertargetr,   Zorelse)r   r$   r-   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 )N)r3   ctxr4   ZStorer#   r   reservedr   r    r   undeclared_identifiersr!   )r   r$   r   r   r   
visit_Name   s    
zFindIdentifiers.visit_Namec             C   sB   x<|j D ]2}|jd k	r$| |j q| |jdd  qW d S )N.r   )namesasnamer#   r"   split)r   r$   r"   r   r   r   visit_Import   s    
zFindIdentifiers.visit_Importc             C   sP   xJ|j D ]@}|jd k	r$| |j q|jdkr<tjd| j| |j qW 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.)rK   )rF   rG   r#   r"   r   ZCompileExceptionr   )r   r$   r"   r   r   r   visit_ImportFrom   s    

z FindIdentifiers.visit_ImportFromN)r   
__module____qualname__r   r#   r%   r*   r   py3kr.   r1   r2   r7   r/   r@   rD   rI   rL   r   r   r   r   r   :   s   r   c               @   s   e Zd Zdd Zdd ZdS )	FindTuplec             K   s   || _ || _|| _d S )N)r   r   code_factory)r   r   rQ   r   r   r   r   r      s    zFindTuple.__init__c             C   sx   xr|j D ]h}| j|f| j}| jj| | jjt|  | jj	}|
|j	| j_	| jj}|
|j| j_qW d S )N)r6   rQ   r   r   Zcodeargsappendr0   ExpressionGeneratorr'   r    r;   rC   )r   r$   r)   pZldiZluir   r   r   visit_Tuple   s    zFindTuple.visit_TupleN)r   rM   rN   r   rU   r   r   r   r   rP      s   rP   c               @   s   e Zd Zdd Zdd ZdS )	ParseFuncc             K   s   || _ || _d S )N)r   r   )r   r   r   r   r   r   r      s    zParseFunc.__init__c             C   s   |j | j_dd |jjD }|jjr6|t|jj tjrBg }ndd |jj	D }|jj
rn|t|jj
 || j_|jj| j_|| j_tjrg | j_n|jj| j_|jj| j_|jj
| j_d S )Nc             S   s   g | ]}t |qS r   )r8   )r9   r   r   r   r   r:      s    z/ParseFunc.visit_FunctionDef.<locals>.<listcomp>c             S   s   g | ]}t |qS r   )r8   )r9   r   r   r   r   r:      s    )r"   r   funcnamer0   varargrR   r   r   Zpy2k
kwonlyargskwargargnamesdefaults
kwargnames
kwdefaultskw_defaultsvarargskwargs)r   r$   r[   r]   r   r   r   r2      s"    

zParseFunc.visit_FunctionDefN)r   rM   rN   r   r2   r   r   r   r   rV      s   rV   c               @   s   e Zd Zdd Zdd ZdS )rS   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 )joinrb   result)r   r   r   r   r'      s    zExpressionGenerator.valueN)r   rM   rN   r   r'   r   r   r   r   rS      s   rS   )r   )__doc__operatorr4   Zmakor   r   r   r   Zmako.compatr   rO   r   rB   
attrgetterr8   Zrestore__astr   ZNodeVisitorr   rP   rV   objectrS   r   r   r   r   <module>   s$   


