
iNc           @   s  d  Z  d d l m Z d d l m Z m Z d d l Z e j rk e d d d d g  Z e j	 d	  Z
 n$ e d d d g  Z e j	 d
  Z
 y) d d l Z e j e  d d l Z Wn7 e k
 r d Z d d l m Z d d l m Z n Xd d  Z e rhd e j f d     YZ d e j f d     YZ d e j f d     YZ d e f d     YZ nq d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ d e j f d     YZ d S(   sy   Handles parsing of Python code.

Parsing to AST is done via _ast on Python > 2.5, otherwise the compiler
module is used.
i(   t   StringIO(   t
   exceptionst   utilNt   Truet   Falset   Nonet   printt   argt   id(   t   parse(   t   visitort   execc         K   s   yN t  r t j |  d |  St |  t  r@ |  j d d  }  n  t |  |  SWn? t k
 r } t j	 d | j
 j | |  d d !f |   n Xd S(   s   Parse an expression into ASTs	   <unknown>t   asciit   backslashreplaces   (%s) %s (%r)i    i2   N(   t   _astt	   _ast_utilR	   t
   isinstancet   unicodet   encodet   compiler_parset	   ExceptionR   t   SyntaxExceptiont	   __class__t   __name__(   t   codet   modet   exception_kwargst   e(    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR	   +   s    	t   FindIdentifiersc           B   s   e  Z d    Z d   Z d   Z d   Z e j r? d   Z n  d   Z	 d   Z
 d   Z d   Z d	   Z d
   Z d   Z RS(   c         K   s1   t  |  _ t  |  _ i  |  _ | |  _ | |  _ d  S(   N(   R   t   in_functiont   in_assign_targetst   local_ident_stackt   listenerR   (   t   selfR    R   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   __init__B   s
    				c         C   s#   |  j  s |  j j j |  n  d  S(   N(   R   R    t   declared_identifierst   add(   R!   t   name(    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   _add_declaredI   s    	c         C   s   |  j  | j  d  S(   N(   R&   R%   (   R!   t   node(    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visit_ClassDefM   s    c         C   sP   |  j  | j  |  j } t |  _ x | j D] } |  j  |  q, W| |  _ d  S(   N(   t   visitt   valueR   R   t   targets(   R!   R'   t   in_at   n(    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visit_AssignP   s    		c         C   sr   | j  d  k	 r" |  j | j   n  | j d  k	 rM |  j j j | j j  n  x | j D] } |  j	 |  qW Wd  S(   N(
   R%   R   R&   t   typeR    t   undeclared_identifiersR$   R   t   bodyR)   (   R!   R'   t	   statement(    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visit_ExceptHandlerb   s    c         G   s   |  j  | t  d  S(   N(   t   _visit_functionR   (   R!   R'   t   args(    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visit_Lambdaj   s    c         C   s$   |  j  | j  |  j | t  d  S(   N(   R&   R%   R4   R   (   R!   R'   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visit_FunctionDefm   s    c         C   s   i  } |  j  } t |  _  xO | j j D]A } t |  |  j k rS t | t |  <q% t |  j t |  <q% W| r |  j | j  n! x | j D] } |  j |  q W| |  _  x9 | j j D]+ } t |  | k r |  j t |  =q q Wd  S(   N(   R   R   R5   t   arg_idR   R)   R1   (   R!   R'   t   islambdat   savedt   infR   R-   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR4   q   s    			c         C   sf   |  j  | j  |  j  | j  x | j D] } |  j  |  q* Wx | j D] } |  j  |  qK Wd  S(   N(   R)   t   itert   targetR1   t   orelse(   R!   R'   R2   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt	   visit_For   s    c         C   s{   t  | j t j  r( |  j | j  n  | j t k rw | j |  j j k rw | j |  j	 k rw |  j j
 j | j  n  d  S(   N(   R   t   ctxR   t   StoreR&   R   t   reservedR    R#   R   R0   R$   (   R!   R'   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt
   visit_Name   s    c         C   sW   xP | j  D]E } | j d  k	 r2 |  j | j  q
 |  j | j j d  d  q
 Wd  S(   Nt   .i    (   t   namest   asnameR   R&   R%   t   split(   R!   R'   R%   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visit_Import   s    c         C   sq   xj | j  D]_ } | j d  k	 r2 |  j | j  q
 | j d k rY t j d |  j   n  |  j | j  q
 Wd  S(   Nt   *s   'import *' is not supported, since all identifier names must be explicitly declared.  Please use the form 'from <modulename> import <name1>, <name2>, ...' instead.(   RE   RF   R   R&   R%   R   t   CompileExceptionR   (   R!   R'   R%   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visit_ImportFrom   s    (   R   t
   __module__R"   R&   R(   R.   R   t   py3kR3   R6   R7   R4   R?   RC   RH   RK   (    (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR   @   s   											t	   FindTuplec           B   s   e  Z d    Z d   Z RS(   c         K   s   | |  _  | |  _ | |  _ d  S(   N(   R    R   t   code_factory(   R!   R    RO   R   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR"      s    		c         C   s   x | j  D] } |  j | |  j  } |  j j j |  |  j j j t |  j    |  j j	 j
 | j	  |  j _	 |  j j j
 | j  |  j _ q
 Wd  S(   N(   t   eltsRO   R   R    t   codeargst   appendR5   t   ExpressionGeneratorR*   R#   t   unionR0   (   R!   R'   R-   t   p(    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visit_Tuple   s    (   R   RL   R"   RV   (    (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyRN      s   	t	   ParseFuncc           B   s   e  Z d    Z d   Z RS(   c         K   s   | |  _  | |  _ d  S(   N(   R    R   (   R!   R    R   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR"      s    	c         C   s   | j  |  j _ g  | j j D] } t |  ^ q } | j j rV | j | j j  n  | j j rx | j | j j  n  | |  j _ | j j	 |  j _	 | j j |  j _
 | j j |  j _ d  S(   N(   R%   R    t   funcnameR5   R8   t   varargRR   t   kwargt   argnamest   defaultst   varargst   kwargs(   R!   R'   R   R[   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR7      s    %(   R   RL   R"   R7   (    (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyRW      s   	RS   c           B   s   e  Z d    Z d   Z RS(   c         C   s&   t  j d  |  _ |  j j |  d  S(   Nt    i   s       (   R   t   SourceGeneratort	   generatorR)   (   R!   t   astnode(    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR"      s    c         C   s   d j  |  j j  S(   Nt    (   t   joinRa   t   result(   R!   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR*      s    (   R   RL   R"   R*   (    (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyRS      s   	c           B   s}   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z RS(   c         K   s(   t  |  _ i  |  _ | |  _ | |  _ d  S(   N(   R   R   R   R    R   (   R!   R    R   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR"      s    			c         C   s#   |  j  s |  j j j |  n  d  S(   N(   R   R    R#   R$   (   R!   R%   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR&      s    	c         G   s   |  j  | j  d  S(   N(   R&   R%   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt
   visitClass   s    c         G   s   |  j  | j  d  S(   N(   R&   R%   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitAssName   s    c         G   s;   |  j  | j |  x! | j D] } |  j  | |  q Wd  S(   N(   R)   t   exprt   nodes(   R!   R'   R5   R-   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitAssign   s    c         G   s   |  j  | |  d  S(   N(   R4   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitLambda   s    c         G   s$   |  j  | j  |  j | |  d  S(   N(   R&   R%   R4   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitFunction  s    c         C   s   i  } |  j  } t |  _  x: | j D]/ } | |  j k rD t | | <q" t |  j | <q" Wx$ | j   D] } |  j | |  qb W| |  _  x* | j D] } | | k r |  j | =q q Wd  S(   N(   R   R   R[   R   t   getChildNodesR)   (   R!   R'   R5   R:   R;   R   R-   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR4     s    			c         G   s=   |  j  | j |  |  j  | j |  |  j  | j |  d  S(   N(   R)   t   listt   assignR1   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitFor  s    c         G   sS   | j  t k rO | j  |  j j k rO | j  |  j k rO |  j j j | j   n  d  S(   N(   R%   RB   R    R#   R   R0   R$   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt	   visitName%  s    c         G   sT   xM | j  D]B \ } } | d  k	 r2 |  j |  q
 |  j | j d  d  q
 Wd  S(   NRD   i    (   RE   R   R&   RG   (   R!   R'   R5   t   modt   alias(    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitImport+  s    c         G   sk   xd | j  D]Y \ } } | d  k	 r2 |  j |  q
 | d k rV t j d |  j   n  |  j |  q
 Wd  S(   NRI   s   '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   RJ   R   (   R!   R'   R5   Rr   Rs   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt	   visitFrom2  s    c         C   s   t  j | |   d  S(   N(   R
   t   walk(   R!   Rh   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR)   ?  s    (   R   RL   R"   R&   Rf   Rg   Rj   Rk   Rl   R4   Rp   Rq   Rt   Ru   R)   (    (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR      s   					
							c           B   s#   e  Z d    Z d   Z d   Z RS(   c         K   s   | |  _  | |  _ | |  _ d  S(   N(   R    R   RO   (   R!   R    RO   R   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR"   E  s    		c         G   s   x | j  D] } |  j | |  j  } |  j j j |  |  j j j t |  j    |  j j	 j
 | j	  |  j _	 |  j j j
 | j  |  j _ q
 Wd  S(   N(   Ri   RO   R   R    RQ   RR   R5   RS   R*   R#   RT   R0   (   R!   R'   R5   R-   RU   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt
   visitTupleJ  s    c         C   s   t  j | |   d  S(   N(   R
   Rv   (   R!   Rh   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR)   T  s    (   R   RL   R"   Rw   R)   (    (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyRN   C  s   		
c           B   s#   e  Z d    Z d   Z d   Z RS(   c         K   s   | |  _  | |  _ d  S(   N(   R    R   (   R!   R    R   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR"   Z  s    	c         G   sO   | j  |  j _ | j |  j _ | j |  j _ | j |  j _ | j |  j _ d  S(   N(   R%   R    RX   R[   R\   R]   R^   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyRl   ^  s
    c         C   s   t  j | |   d  S(   N(   R
   Rv   (   R!   Rh   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR)   e  s    (   R   RL   R"   Rl   R)   (    (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyRW   X  s   		c           B   s%  e  Z d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! RS(    sM   given an AST node, generates an equivalent literal Python
        expression.c         C   s    t    |  _ t j | |   d  S(   N(   R    t   bufR
   Rv   (   R!   Rb   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR"   n  s    c         C   s   |  j  j   S(   N(   Rx   t   getvalue(   R!   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR*   r  s    c         G   s^   |  j  j d  |  j | j |  |  j  j d |  |  j | j |  |  j  j d  d  S(   Nt   (s    %s t   )(   Rx   t   writeR)   t   leftt   right(   R!   t   opR'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   operatoru  s
    c         G   sX   |  j  | j d  x= | j d D]. } |  j j d | d  |  j  | |  q" Wd  S(   Ni    i   R_   (   R)   Ri   Rx   R|   (   R!   R   R'   R5   R-   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt	   booleanop|  s    c         G   s   |  j  j t | j   d  S(   N(   Rx   R|   t   reprR*   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt
   visitConst  s    c         G   s   |  j  j | j  d  S(   N(   Rx   R|   R%   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyRg     s    c         G   s   |  j  j | j  d  S(   N(   Rx   R|   R%   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyRq     s    c         G   s   |  j  d | |  d  S(   NRI   (   R   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitMul  s    c         G   s   |  j  d | |  d  S(   Nt   and(   R   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitAnd  s    c         G   s   |  j  d | |  d  S(   Nt   or(   R   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitOr  s    c         G   s   |  j  d | |  d  S(   Nt   &(   R   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitBitand  s    c         G   s   |  j  d | |  d  S(   Nt   |(   R   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt
   visitBitor  s    c         G   s   |  j  d | |  d  S(   Nt   ^(   R   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitBitxor  s    c         G   s   |  j  d | |  d  S(   Nt   +(   R   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitAdd  s    c         G   s.   |  j  | j |  |  j j d | j  d  S(   Ns   .%s(   R)   Rh   Rx   R|   t   attrname(   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitGetattr  s    c         G   s   |  j  d | |  d  S(   Nt   -(   R   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitSub  s    c         G   s$   |  j  j d  |  j | j  d  S(   Ns   not (   Rx   R|   R)   Rh   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitNot  s    c         G   s   |  j  d | |  d  S(   Nt   /(   R   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitDiv  s    c         G   s   |  j  d | |  d  S(   Ns   //(   R   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitFloorDiv  s    c         G   sW   |  j  | j  |  j j d  g  | j D] } |  j  |  ^ q* |  j j d  d  S(   Nt   [t   ](   R)   Rh   Rx   R|   t   subs(   R!   R'   R5   t   x(    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitSubscript  s    #c         G   s$   |  j  j d  |  j | j  d  S(   NR   (   Rx   R|   R)   Rh   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitUnarySub  s    c         G   s$   |  j  j d  |  j | j  d  S(   NR   (   Rx   R|   R)   Rh   (   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitUnaryAdd  s    c         G   s   |  j  | j  |  j j d  | j d  k	 rB |  j  | j  n  |  j j d  | j d  k	 rt |  j  | j  n  |  j j d  d  S(   NR   t   :R   (   R)   Rh   Rx   R|   t   lowerR   t   upper(   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt
   visitSlice  s    c         C   s   |  j  j d  | j   } x t d t |  d  D]e } |  j | |  |  j  j d  |  j | | d  | t |  d k  r5 |  j  j d  q5 q5 W|  j  j d  d  S(   Nt   {i    i   s   : i   s   , t   }(   Rx   R|   t   getChildrent   ranget   lenR)   (   R!   R'   t   ct   i(    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt	   visitDict  s    c         C   s   |  j  j d  | j   } xW t d t |   D]@ } |  j | |  | t |  d k  r2 |  j  j d  q2 q2 W|  j  j d  d  S(   NRz   i    i   s   , R{   (   Rx   R|   R   R   R   R)   (   R!   R'   R   R   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyRw     s    c         C   s   |  j  j d  | j   } xW t d t |   D]@ } |  j | |  | t |  d k  r2 |  j  j d  q2 q2 W|  j  j d  d  S(   NR   i    i   s   , R   (   Rx   R|   R   R   R   R)   (   R!   R'   R   R   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt	   visitList  s    c         C   se   |  j  j d  |  j | j  |  j  j d  x | j D] } |  j |  q: W|  j  j d  d  S(   NR   R_   R   (   Rx   R|   R)   Rh   t   quals(   R!   R'   R-   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitListComp  s    c         C   se   |  j  j d  |  j | j  |  j  j d  |  j | j  x | j D] } |  j |  qJ Wd  S(   Ns    for s    in (   Rx   R|   R)   Ro   Rn   t   ifs(   R!   R'   R-   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitListCompFor  s    c         C   s$   |  j  j d  |  j | j  d  S(   Ns    if (   Rx   R|   R)   t   test(   R!   R'   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitListCompIf  s    c         C   sM   |  j  | j  x6 | j D]+ } |  j j | d  |  j  | d  q Wd  S(   Ni    i   (   R)   Rh   t   opsRx   R|   (   R!   R'   t   tup(    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitCompare  s    c         G   s   |  j  | j  |  j j d  t | j  r{ |  j  | j d  x5 | j d D]# } |  j j d  |  j  |  qQ Wn  |  j j d  d  S(   NRz   i    i   s   , R{   (   R)   R'   Rx   R|   R   R5   (   R!   R'   R5   t   a(    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   visitCallFunc  s    ("   R   RL   t   __doc__R"   R*   R   R   R   Rg   Rq   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   Rw   R   R   R   R   R   R   (    (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyRS   i  s@   																							
									t   walkerc           B   s   e  Z d    Z RS(   c         G   s%   d Gt  |  GHt j j |  | |  S(   Ns   Node:(   t   strR
   t
   ASTVisitort   dispatch(   R!   R'   R5   (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR     s    (   R   RL   R   (    (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyR     s   (   R   R    t   makoR   R   R   RM   t   setRB   t
   attrgetterR8   R   t   restore__astR   t   ImportErrorR   t   compilerR	   R   R
   t   NodeVisitorR   RN   RW   t   objectRS   R   R   (    (    (    s1   /usr/lib/python2.7/dist-packages/mako/pyparser.pyt   <module>   s6   	s	`