U
    EZhR*                     @   s   d dl Z d dlmZ d dlmZ d dlmZ dd Zdd Zd	d
 Z	dd Z
G dd deZG dd deZG dd deZG dd deZG dd deZdS )    N)	functions)string_type)Numberc                 C   s   t | |rdS | |kS d S NF)_is_special_number_casexy r
   W/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/jmespath/visitor.py_equals   s    
r   c                 C   s8   t | r| dkrt|tS t |r4|dkr4t| tS d S )N)r      )_is_actual_number
isinstanceboolr   r
   r
   r   r      s    
r   c                 C   s   t | pt| tS N)r   r   r   r   r
   r
   r   _is_comparable&   s    r   c                 C   s   t | trdS t | tS r   )r   r   r   r   r
   r
   r   r   .   s    
r   c                   @   s   e Zd ZdZdddZdS )Optionsz8Options to control how a JMESPath function is evaluated.Nc                 C   s   || _ || _d S r   )dict_clscustom_functions)selfr   r   r
   r
   r   __init__=   s    	zOptions.__init__)NN)__name__
__module____qualname____doc__r   r
   r
   r
   r   r   ;   s   r   c                   @   s   e Zd Zdd Zdd ZdS )_Expressionc                 C   s   || _ || _d S r   )
expressioninterpreter)r   r   r   r
   r
   r   r   K   s    z_Expression.__init__c                 O   s   | j j|f||S r   )r   visitr   nodeargskwargsr
   r
   r   r    O   s    z_Expression.visitN)r   r   r   r   r    r
   r
   r
   r   r   J   s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Visitorc                 C   s
   i | _ d S r   )_method_cacher   r
   r
   r   r   T   s    zVisitor.__init__c                 O   sL   |d }| j |}|d kr<t| d|d  | j}|| j |< ||f||S )Ntypezvisit_%s)r&   getgetattrdefault_visit)r   r"   r#   r$   Z	node_typemethodr
   r
   r   r    W   s     
 
zVisitor.visitc                 O   s   t dd S )Nr+   NotImplementedErrorr!   r
   r
   r   r+   `   s    zVisitor.default_visitN)r   r   r   r   r    r+   r
   r
   r
   r   r%   S   s   	r%   c                       s  e Zd Zedd ejejejejdZ	ddgZ
eZd; f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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)d* Zd+d, Zd-d. Z d/d0 Z!d1d2 Z"d3d4 Z#d5d6 Z$d7d8 Z%d9d: Z&  Z'S )<TreeInterpreterc                 C   s   t | | S r   )r   r   r
   r
   r   <lambda>g       zTreeInterpreter.<lambda>)eqneltgtZlteZgter2   r3   Nc                    sb   t t|   | j| _|d kr$t }|| _|jd k	r>| jj| _|jd k	rT| jj| _	n
t
 | _	d S r   )superr/   r   MAP_TYPE	_dict_clsr   _optionsr   r   
_functionsr   Z	Functions)r   options	__class__r
   r   r   p   s    


zTreeInterpreter.__init__c                 O   s   t |d d S )Nr(   r-   r!   r
   r
   r   r+   }   s    zTreeInterpreter.default_visitc                 C   s"   |}|d D ]}|  ||}q|S Nchildrenr    r   r"   valueresultr
   r
   r   visit_subexpression   s    z#TreeInterpreter.visit_subexpressionc                 C   s,   z| |d W S  tk
r&   Y d S X d S NrB   )r)   AttributeErrorr   r"   rB   r
   r
   r   visit_field   s    zTreeInterpreter.visit_fieldc                 C   s   | j |d  }|d | jkrF|| |d d || |d d |S | |d d |}| |d d |}ttf}t|rt|sd S |||S d S )NrB   r?   r   r   )COMPARATOR_FUNC_EQUALITY_OPSr    intfloatr   )r   r"   rB   Zcomparator_funcleftrightZ	num_typesr
   r
   r   visit_comparator   s    z TreeInterpreter.visit_comparatorc                 C   s   |S r   r
   rG   r
   r
   r   visit_current   s    zTreeInterpreter.visit_currentc                 C   s   t |d d | S Nr?   r   )r   rG   r
   r
   r   visit_expref   s    zTreeInterpreter.visit_exprefc                 C   s:   g }|d D ]}|  ||}|| q| j|d |S Nr?   rB   )r    appendr:   Zcall_function)r   r"   rB   Zresolved_argschildcurrentr
   r
   r   visit_function_expression   s
    z)TreeInterpreter.visit_function_expressionc                 C   sx   |  |d d |}t|ts"d S |d d }g }|D ]<}| |  ||r6|  |d d |}|d k	r6|| q6|S )Nr?   r      r   )r    r   list_is_truerT   )r   r"   rB   baseZcomparator_node	collectedelementrV   r
   r
   r   visit_filter_projection   s    
z'TreeInterpreter.visit_filter_projectionc                 C   sT   |  |d d |}t|ts"d S g }|D ]$}t|trD|| q*|| q*|S rQ   )r    r   rY   extendrT   )r   r"   rB   r[   Zmerged_listr]   r
   r
   r   visit_flatten   s    

zTreeInterpreter.visit_flattenc                 C   s   |S r   r
   rG   r
   r
   r   visit_identity   s    zTreeInterpreter.visit_identityc                 C   s8   t |tsd S z||d  W S  tk
r2   Y d S X d S rE   )r   rY   
IndexErrorrG   r
   r
   r   visit_index   s    
zTreeInterpreter.visit_indexc                 C   s"   |}|d D ]}|  ||}q|S r>   r@   rA   r
   r
   r   visit_index_expression   s    z&TreeInterpreter.visit_index_expressionc                 C   s"   t |tsd S t|d  }|| S r>   )r   rY   slice)r   r"   rB   sr
   r
   r   visit_slice   s    
zTreeInterpreter.visit_slicec                 C   s   |  |d d |S rQ   r@   rG   r
   r
   r   visit_key_val_pair   s    z"TreeInterpreter.visit_key_val_pairc                 C   s   |d S rE   r
   rG   r
   r
   r   visit_literal   s    zTreeInterpreter.visit_literalc                 C   s:   |d krd S |   }|d D ]}| ||||d < q|S rS   )r8   r    r   r"   rB   r\   rU   r
   r
   r   visit_multi_select_dict   s    z'TreeInterpreter.visit_multi_select_dictc                 C   s4   |d krd S g }|d D ]}| | || q|S r>   )rT   r    rj   r
   r
   r   visit_multi_select_list   s    z'TreeInterpreter.visit_multi_select_listc                 C   s6   |  |d d |}| |r2|  |d d |}|S Nr?   r   r   r    	_is_falser   r"   rB   Zmatchedr
   r
   r   visit_or_expression   s    
z#TreeInterpreter.visit_or_expressionc                 C   s6   |  |d d |}| |r"|S |  |d d |S rm   rn   rp   r
   r
   r   visit_and_expression   s    
z$TreeInterpreter.visit_and_expressionc                 C   s.   |  |d d |}t|r(|dkr(dS | S )Nr?   r   F)r    r   )r   r"   rB   Zoriginal_resultr
   r
   r   visit_not_expression  s    z$TreeInterpreter.visit_not_expressionc                 C   s"   |}|d D ]}|  ||}q|S r>   r@   rA   r
   r
   r   
visit_pipe
  s    zTreeInterpreter.visit_pipec                 C   sZ   |  |d d |}t|ts"d S g }|D ]*}|  |d d |}|d k	r*|| q*|S rm   )r    r   rY   rT   r   r"   rB   r[   r\   r]   rV   r
   r
   r   visit_projection  s    
z TreeInterpreter.visit_projectionc                 C   sp   |  |d d |}z| }W n tk
r6   Y d S X g }|D ]*}|  |d d |}|d k	r@|| q@|S rm   )r    valuesrF   rT   ru   r
   r
   r   visit_value_projection  s    z&TreeInterpreter.visit_value_projectionc                 C   s(   |dkp&|g kp&|i kp&|d kp&|dkS )N Fr
   r   rB   r
   r
   r   ro   (  s     zTreeInterpreter._is_falsec                 C   s   |  | S r   )ro   rz   r
   r
   r   rZ   /  s    zTreeInterpreter._is_true)N)(r   r   r   r   operatorr4   r5   legerI   rJ   dictr7   r   r+   rD   rH   rO   rP   rR   rW   r^   r`   ra   rc   rd   rg   rh   ri   rk   rl   rq   rr   rs   rt   rv   rx   ro   rZ   __classcell__r
   r
   r<   r   r/   d   sF   
r/   c                       s,   e Zd Z fddZdd Zdd Z  ZS )GraphvizVisitorc                    s   t t|   g | _d| _d S )Nr   )r6   r   r   _lines_countr'   r<   r
   r   r   4  s    zGraphvizVisitor.__init__c                 O   sP   | j d d|d | jf }|  jd7  _| || | j d d| j S )Nzdigraph AST {%s%sr(   r   }
)r   rT   r   _visitjoin)r   r"   r#   r$   rV   r
   r
   r   r    9  s    zGraphvizVisitor.visitc              	   C   sx   | j d||d |ddf  |dg D ]D}d|d | jf }|  jd7  _| j d||f  | || q.d S )	Nz%s [label="%s(%s)"]r(   rB   ry   r?   r   r   z
  %s -> %s)r   rT   r)   r   r   )r   r"   rV   rU   Z
child_namer
   r
   r   r   A  s      
zGraphvizVisitor._visit)r   r   r   r   r    r   r   r
   r
   r<   r   r   3  s   r   )r{   jmespathr   Zjmespath.compatr   numbersr   r   r   r   r   objectr   r   r%   r/   r   r
   r
   r
   r   <module>   s   	 P