
    \*                         d dl Z d dlmZ d dlmZ d dlmZ d Zd Zd Z	d Z
 G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Zy)    N)	functions)string_type)Numberc                 &    t        | |      ry| |k(  S )NF)_is_special_integer_casexys     #lib/third_party/jmespath/visitor.py_equalsr      s    1%Av    c                     t        |       t        u r| dk(  s| dk(  r
|du xs |du S t        |      t        u r|dk(  s|dk(  r
| du xs | du S y y )Nr      TF)typeintr   s     r   r   r      s_    " Aw#~16Q!VDy&AJ&	aCQ!VqAvDy&AJ& (.r   c                 <    t        |       xs t        | t              S N)_is_actual_number
isinstancer   r	   s    r   _is_comparabler   &   s    
 Q=:a#==r   c                 4    | du s| du ryt        | t              S )NTF)r   r   r   s    r   r   r   .   s!     	DyAJa  r   c                       e Zd ZdZddZy)Optionsz8Options to control how a JMESPath function is evaluated.Nc                      || _         || _        y r   )dict_clscustom_functions)selfr   r   s      r   __init__zOptions.__init__=   s     ! 0r   )NN)__name__
__module____qualname____doc__r    r   r   r   r   ;   s
    B
1r   r   c                       e Zd Zd Zd Zy)_Expressionc                      || _         || _        y r   )
expressioninterpreter)r   r(   r)   s      r   r   z_Expression.__init__K   s    $&r   c                 B     | j                   j                  |g|i |S r   )r)   visitr   nodeargskwargss       r   r+   z_Expression.visitO   s%    %t%%d<T<V<<r   N)r    r!   r"   r   r+   r$   r   r   r&   r&   J   s    '=r   r&   c                       e Zd Zd Zd Zd Zy)Visitorc                     i | _         y r   )_method_cache)r   s    r   r   zVisitor.__init__T   s
    r   c                     |d   }| j                   j                  |      }|,t        | d|d   z  | j                        }|| j                   |<    ||g|i |S )Nr   zvisit_%s)r3   getgetattrdefault_visit)r   r-   r.   r/   	node_typemethods         r   r+   zVisitor.visitW   sl    L	##''	2>j4</1C1CEF,2Dy)d,T,V,,r   c                     t        d      )Nr7   NotImplementedErrorr,   s       r   r7   zVisitor.default_visit`   s    !/22r   N)r    r!   r"   r   r+   r7   r$   r   r   r1   r1   S   s     -3r   r1   c                   &    e Zd Zed ej
                  ej                  ej                  ej                  dZ	ddgZ
eZd f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& xZ'S ) TreeInterpreterc                     t        | |       S r   )r   r   s     r   <lambda>zTreeInterpreter.<lambda>g   s    wq!},r   )eqneltgtltegterA   rB   c                 B   t         t        |           | j                  | _        |
t               }|| _        |j                  | j                  j                  | _        |j                  | j                  j                  | _	        y t        j                         | _	        y r   )superr>   r   MAP_TYPE	_dict_clsr   _optionsr   r   
_functionsr   	Functions)r   options	__class__s     r   r   zTreeInterpreter.__init__p   sx    ot-/?iG'!]]33DN##/"mm<<DO'113DOr   c                     t        |d         )Nr   r;   r,   s       r   r7   zTreeInterpreter.default_visit}   s    !$v,//r   c                 B    |}|d   D ]  }| j                  ||      } |S Nchildrenr+   r   r-   valueresults       r   visit_subexpressionz#TreeInterpreter.visit_subexpression   +    $DZZf-F %r   c                 J    	 |j                  |d         S # t        $ r Y y w xY wNrV   )r5   AttributeErrorr   r-   rV   s      r   visit_fieldzTreeInterpreter.visit_field   s,    	99T']++ 		s    	""c                 j   | j                   |d      }|d   | j                  v r5 || j                  |d   d   |      | j                  |d   d   |            S | j                  |d   d   |      }| j                  |d   d   |      }t        t        f}t        |      rt        |      sy  |||      S )NrV   rS   r   r   )COMPARATOR_FUNC_EQUALITY_OPSr+   r   floatr   )r   r-   rV   comparator_funcleftright	num_typess          r   visit_comparatorz TreeInterpreter.visit_comparator   s    ..tG}==D..."

4
+A.6

4
+A.6  ::d:.q159DJJtJ/2E:EeI"4("5)"4//r   c                     |S r   r$   r]   s      r   visit_currentzTreeInterpreter.visit_current       r   c                 &    t        |d   d   |       S NrS   r   )r&   r]   s      r   visit_exprefzTreeInterpreter.visit_expref   s    4
+A.55r   c                     g }|d   D ]%  }| j                  ||      }|j                  |       ' | j                  j                  |d   |      S NrS   rV   )r+   appendrL   call_function)r   r-   rV   resolved_argschildcurrents         r   visit_function_expressionz)TreeInterpreter.visit_function_expression   sQ    *%Ejj.G  ) & ,,T']MJJr   c                    | j                  |d   d   |      }t        |t              sy |d   d   }g }|D ]P  }| j                  | j                  ||            s%| j                  |d   d   |      }|@|j	                  |       R |S )NrS   r      r   )r+   r   list_is_truerp   )r   r-   rV   basecomparator_node	collectedelementrt   s           r   visit_filter_projectionz'TreeInterpreter.visit_filter_projection   s    zz$z*1-u5$%z*1-	G}}TZZAB**T*%5a%8'B&$$W-	 
 r   c                     | j                  |d   d   |      }t        |t              sy g }|D ]5  }t        |t              r|j                  |       %|j	                  |       7 |S rl   )r+   r   rx   extendrp   )r   r-   rV   rz   merged_listr}   s         r   visit_flattenzTreeInterpreter.visit_flatten   sf    zz$z*1-u5$%G'4(""7+""7+	 
 r   c                     |S r   r$   r]   s      r   visit_identityzTreeInterpreter.visit_identity   rj   r   c                 T    t        |t              sy 	 ||d      S # t        $ r Y y w xY wr[   )r   rx   
IndexErrorr]   s      r   visit_indexzTreeInterpreter.visit_index   s7     %&	g'' 		s    	''c                 B    |}|d   D ]  }| j                  ||      } |S rR   rT   rU   s       r   visit_index_expressionz&TreeInterpreter.visit_index_expression   rY   r   c                 D    t        |t              sy t        |d    }||   S rR   )r   rx   slice)r   r-   rV   ss       r   visit_slicezTreeInterpreter.visit_slice   s'    %&4
#$Qxr   c                 2    | j                  |d   d   |      S rl   rT   r]   s      r   visit_key_val_pairz"TreeInterpreter.visit_key_val_pair   s    zz$z*1-u55r   c                     |d   S r[   r$   r]   s      r   visit_literalzTreeInterpreter.visit_literal   s    G}r   c                 p    |y | j                         }|d   D ]  }| j                  ||      ||d   <    |S ro   )rJ   r+   r   r-   rV   r|   rs   s        r   visit_multi_select_dictz'TreeInterpreter.visit_multi_select_dict   sD    =NN$	*%E(,

5%(@IeGn% &r   c                 f    |y g }|d   D ]#  }|j                  | j                  ||             % |S rR   )rp   r+   r   s        r   visit_multi_select_listz'TreeInterpreter.visit_multi_select_list   s=    =	*%ETZZu56 &r   c                     | j                  |d   d   |      }| j                  |      r| j                  |d   d   |      }|S NrS   r   r   r+   	_is_falser   r-   rV   matcheds       r   visit_or_expressionz#TreeInterpreter.visit_or_expression   sG    **T*-a0%8>>'"jjj!1!!4e<Gr   c                     | j                  |d   d   |      }| j                  |      r|S | j                  |d   d   |      S r   r   r   s       r   visit_and_expressionz$TreeInterpreter.visit_and_expression   sH    **T*-a0%8>>'"Nzz$z*1-u55r   c                 f    | j                  |d   d   |      }t        |      t        u r|dk(  ry| S )NrS   r   F)r+   r   r   )r   r-   rV   original_results       r   visit_not_expressionz$TreeInterpreter.visit_not_expression  s>    **T*%5a%8%@ C'Oq,@ """r   c                 B    |}|d   D ]  }| j                  ||      } |S rR   rT   rU   s       r   
visit_pipezTreeInterpreter.visit_pipe
  rY   r   c                     | j                  |d   d   |      }t        |t              sy g }|D ].  }| j                  |d   d   |      }||j                  |       0 |S r   )r+   r   rx   rp   r   r-   rV   rz   r|   r}   rt   s          r   visit_projectionz TreeInterpreter.visit_projection  sn    zz$z*1-u5$%	Gjjj!1!!4g>G"  )  r   c                     | j                  |d   d   |      }	 |j                         }g }|D ].  }| j                  |d   d   |      }||j                  |       0 |S # t        $ r Y y w xY wr   )r+   valuesr\   rp   r   s          r   visit_value_projectionz&TreeInterpreter.visit_value_projection  s    zz$z*1-u5	;;=D 	Gjjj!1!!4g>G"  )    		s   A! !	A-,A-c                 @    |dk(  xs |g k(  xs |i k(  xs
 |d u xs |du S )N Fr$   r   rV   s     r   r   zTreeInterpreter._is_false(  s=      u{ erk Ud] 	 r   c                 &    | j                  |       S r   )r   r   s     r   ry   zTreeInterpreter._is_true/  s    >>%(((r   r   )(r    r!   r"   r   operatorrC   rD   leger`   ra   dictrI   r   r7   rX   r^   rg   ri   rm   ru   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ry   __classcell__rO   s   @r   r>   r>   d   s    ,kkkk{{{{O 4LMH400(6K66#	 )r   r>   c                   *     e Zd Z fdZd Zd Z xZS )GraphvizVisitorc                 F    t         t        |           g | _        d| _        y )Nr   )rH   r   r   _lines_count)r   rO   s    r   r   zGraphvizVisitor.__init__4  s    ot-/r   c                    | j                   j                  d       |d   | j                  }| xj                  dz  c_        | j                  ||       | j                   j                  d       dj	                  | j                         S )Nzdigraph AST {r   r   }
)r   rp   r   _visitjoin)r   r-   r.   r/   rt   s        r   r+   zGraphvizVisitor.visit9  sg    ?+ L$++6qD'"3yy%%r   c           
      V   | j                   j                  |d|d   d|j                  dd      d       |j                  dg       D ]]  }|d   | j                  }| xj                  dz  c_        | j                   j                  d	|d
|       | j	                  ||       _ y )Nz	 [label="r   (rV   r   z)"]rS   r   z  z -> )r   rp   r5   r   r   )r   r-   rt   rs   
child_names        r   r   zGraphvizVisitor._visitA  s    T&\488GR#8: 	;XXj"-E#(=$++>JKK1KKKw
CDKKz*	 .r   )r    r!   r"   r   r+   r   r   r   s   @r   r   r   3  s    
&+r   r   )r   jmespathr   jmespath.compatr   numbersr   r   r   r   r   objectr   r&   r1   r>   r   r$   r   r   <module>r      sd      ' '.>
!1f 1=& =3f 3"L)g L)^+g +r   