o
    YRhR*                     @   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 NF)_is_special_number_casexy r
   R/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/jmespath/visitor.py_equals   s   
r   c                 C   s<   t | r| dv rt|tS t |r|dv rt| tS d 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      || _ || _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   r   r   )
expressioninterpreter)r   r   r    r
   r
   r   r   K   s   
z_Expression.__init__c                 O   s   | j j|g|R i |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   sR   |d }| j |}|d u rt| d|d  | j}|| j |< ||g|R i |S )Ntypezvisit_%s)r'   getgetattrdefault_visit)r   r#   r$   r%   	node_typemethodr
   r
   r   r!   W   s   
zVisitor.visitc                 O   s   t d)Nr,   NotImplementedErrorr"   r
   r
   r   r,   `      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   s    zTreeInterpreter.<lambda>)eqneltgtltegter4   r5   Nc                    sd   t t|   | j| _|d u rt }|| _|jd ur| jj| _|jd ur+| jj| _	d S t
 | _	d S r   )superr2   r   MAP_TYPE	_dict_clsr   _optionsr   r   
_functionsr   	Functions)r   options	__class__r
   r   r   p   s   


zTreeInterpreter.__init__c                 O   s   t |d )Nr)   r/   r"   r
   r
   r   r,   }      zTreeInterpreter.default_visitc                 C   "   |}|d D ]}|  ||}q|S Nchildrenr!   r   r#   valueresultr
   r
   r   visit_subexpression      z#TreeInterpreter.visit_subexpressionc                 C   s&   z| |d W S  ty   Y d S w NrI   )r*   AttributeErrorr   r#   rI   r
   r
   r   visit_field   s
   zTreeInterpreter.visit_fieldc                 C   s   | j |d  }|d | jv r#|| |d d || |d d |S | |d d |}| |d d |}ttf}t|rCt|sEd S |||S )NrI   rF   r   r   )COMPARATOR_FUNC_EQUALITY_OPSr!   intfloatr   )r   r#   rI   comparator_funcleftright	num_typesr
   r
   r   visit_comparator   s   
z TreeInterpreter.visit_comparatorc                 C      |S r   r
   rO   r
   r
   r   visit_current      zTreeInterpreter.visit_currentc                 C   s   t |d d | S NrF   r   )r   rO   r
   r
   r   visit_expref   s   zTreeInterpreter.visit_exprefc                 C   s:   g }|d D ]}|  ||}|| q| j|d |S NrF   rI   )r!   appendr>   call_function)r   r#   rI   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 ]}| |  ||r9|  |d d |}|d ur9|| q|S )NrF   r      r   )r!   r   list_is_truer`   )r   r#   rI   basecomparator_node	collectedelementrd   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r"|| q|| q|S r]   )r!   r   rg   extendr`   )r   r#   rI   ri   merged_listrl   r
   r
   r   visit_flatten   s   

zTreeInterpreter.visit_flattenc                 C   rZ   r   r
   rO   r
   r
   r   visit_identity   r\   zTreeInterpreter.visit_identityc                 C   s2   t |tsd S z||d  W S  ty   Y d S w rM   )r   rg   
IndexErrorrO   r
   r
   r   visit_index   s   
zTreeInterpreter.visit_indexc                 C   rD   rE   rG   rH   r
   r
   r   visit_index_expression   rL   z&TreeInterpreter.visit_index_expressionc                 C   s"   t |tsd S t|d  }|| S rE   )r   rg   slice)r   r#   rI   sr
   r
   r   visit_slice   s   
zTreeInterpreter.visit_slicec                 C   s   |  |d d |S r]   rG   rO   r
   r
   r   visit_key_val_pair   s   z"TreeInterpreter.visit_key_val_pairc                 C   s   |d S rM   r
   rO   r
   r
   r   visit_literal   r1   zTreeInterpreter.visit_literalc                 C   s:   |d u rd S |   }|d D ]}| ||||d < q|S r_   )r<   r!   r   r#   rI   rk   rc   r
   r
   r   visit_multi_select_dict   s   z'TreeInterpreter.visit_multi_select_dictc                 C   s4   |d u rd S g }|d D ]}| | || q|S rE   )r`   r!   rz   r
   r
   r   visit_multi_select_list   s   z'TreeInterpreter.visit_multi_select_listc                 C   s6   |  |d d |}| |r|  |d d |}|S NrF   r   r   r!   	_is_falser   r#   rI   matchedr
   r
   r   visit_or_expression   s   
z#TreeInterpreter.visit_or_expressionc                 C   s6   |  |d d |}| |r|S |  |d d |S r}   r~   r   r
   r
   r   visit_and_expression   s   
z$TreeInterpreter.visit_and_expressionc                 C   s.   |  |d d |}t|r|dkrdS | S )NrF   r   F)r!   r   )r   r#   rI   original_resultr
   r
   r   visit_not_expression  s   z$TreeInterpreter.visit_not_expressionc                 C   rD   rE   rG   rH   r
   r
   r   
visit_pipe
  rL   zTreeInterpreter.visit_pipec                 C   sZ   |  |d d |}t|tsd S g }|D ]}|  |d d |}|d ur*|| q|S r}   )r!   r   rg   r`   r   r#   rI   ri   rk   rl   rd   r
   r
   r   visit_projection  s   

z TreeInterpreter.visit_projectionc                 C   sn   |  |d d |}z| }W n
 ty   Y d S w g }|D ]}|  |d d |}|d ur4|| q|S r}   )r!   valuesrN   r`   r   r
   r
   r   visit_value_projection  s   
z&TreeInterpreter.visit_value_projectionc                 C   s(   |dkp|g kp|i kp|d u p|du S )N Fr
   r   rI   r
   r
   r   r   (  s    zTreeInterpreter._is_falsec                 C   s   |  | S r   )r   r   r
   r
   r   rh   /  rC   zTreeInterpreter._is_truer   )(r   r   r   r   operatorr6   r7   legerQ   rR   dictr;   r   r,   rK   rP   rY   r[   r^   re   rm   rp   rq   rs   rt   rw   rx   ry   r{   r|   r   r   r   r   r   r   r   rh   __classcell__r
   r
   rA   r   r2   d   sH    
r2   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   )r:   r   r   _lines_countr(   rA   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   r`   r   _visitjoin)r   r#   r$   r%   rd   r
   r
   r   r!   9  s   zGraphvizVisitor.visitc              	   C   sx   | j d||d |ddf  |dg D ]"}d|d | jf }|  jd7  _| j d||f  | || qd S )	Nz%s [label="%s(%s)"]r)   rI   r   rF   r   r   z
  %s -> %s)r   r`   r*   r   r   )r   r#   rd   rc   
child_namer
   r
   r   r   A  s   zGraphvizVisitor._visit)r   r   r   r   r!   r   r   r
   r
   rA   r   r   3  s    r   )r   jmespathr   jmespath.compatr   numbersr   r   r   r   r   objectr   r   r&   r2   r   r
   r
   r
   r   <module>   s    	 P