o
    h\*                     @   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_integer_casexy r	   X/var/www/html/magazine_api/magazine_env/lib/python3.10/site-packages/jmespath/visitor.py_equals   s   
r   c                 C   s`   t | tu r| dks| dkr|du p|du S t |tu r,|dks$|dkr.| du p+| du S d S d S )Nr      TF)typeintr   r	   r	   r
   r      s
   r   c                 C   s   t | pt| tS N)_is_actual_number
isinstancer   r   r	   r	   r
   _is_comparable&   s   r   c                 C   s   | du s| du r
dS t | tS )NTF)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 )Nr   z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)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gtZlteZgter2   r3   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   )superr0   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 )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 NrD   )r)   AttributeErrorr   r#   rD   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 )NrD   rA   r   r   )COMPARATOR_FUNC_EQUALITY_OPSr!   r   floatr   )r   r#   rD   Zcomparator_funcleftrightZ	num_typesr	   r	   r
   visit_comparator   s   
z TreeInterpreter.visit_comparatorc                 C      |S r   r	   rJ   r	   r	   r
   visit_current      zTreeInterpreter.visit_currentc                 C   s   t |d d | S NrA   r   )r   rJ   r	   r	   r
   visit_expref   s   zTreeInterpreter.visit_exprefc                 C   s:   g }|d D ]}|  ||}|| q| j|d |S NrA   rD   )r!   appendr:   Zcall_function)r   r#   rD   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 ]}| |  ||r9|  |d d |}|d ur9|| q|S )NrA   r      r   )r!   r   list_is_truerX   )r   r#   rD   baseZcomparator_node	collectedelementrZ   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 rU   )r!   r   r]   extendrX   )r   r#   rD   r_   Zmerged_listra   r	   r	   r
   visit_flatten   s   

zTreeInterpreter.visit_flattenc                 C   rR   r   r	   rJ   r	   r	   r
   visit_identity   rT   zTreeInterpreter.visit_identityc                 C   s2   t |tsd S z||d  W S  ty   Y d S w rH   )r   r]   
IndexErrorrJ   r	   r	   r
   visit_index   s   
zTreeInterpreter.visit_indexc                 C   r?   r@   rB   rC   r	   r	   r
   visit_index_expression   rG   z&TreeInterpreter.visit_index_expressionc                 C   s"   t |tsd S t|d  }|| S r@   )r   r]   slice)r   r#   rD   sr	   r	   r
   visit_slice   s   
zTreeInterpreter.visit_slicec                 C   s   |  |d d |S rU   rB   rJ   r	   r	   r
   visit_key_val_pair   s   z"TreeInterpreter.visit_key_val_pairc                 C   s   |d S rH   r	   rJ   r	   r	   r
   visit_literal   r/   zTreeInterpreter.visit_literalc                 C   s:   |d u rd S |   }|d D ]}| ||||d < q|S rW   )r8   r!   r   r#   rD   r`   rY   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 r@   )rX   r!   rn   r	   r	   r
   visit_multi_select_list   s   z'TreeInterpreter.visit_multi_select_listc                 C   s6   |  |d d |}| |r|  |d d |}|S NrA   r   r   r!   	_is_falser   r#   rD   Zmatchedr	   r	   r
   visit_or_expression   s   
z#TreeInterpreter.visit_or_expressionc                 C   s6   |  |d d |}| |r|S |  |d d |S rq   rr   rt   r	   r	   r
   visit_and_expression   s   
z$TreeInterpreter.visit_and_expressionc                 C   s2   |  |d d |}t|tu r|dkrdS | S )NrA   r   F)r!   r   r   )r   r#   rD   Zoriginal_resultr	   r	   r
   visit_not_expression  s   z$TreeInterpreter.visit_not_expressionc                 C   r?   r@   rB   rC   r	   r	   r
   
visit_pipe
  rG   zTreeInterpreter.visit_pipec                 C   sZ   |  |d d |}t|tsd S g }|D ]}|  |d d |}|d ur*|| q|S rq   )r!   r   r]   rX   r   r#   rD   r_   r`   ra   rZ   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 rq   )r!   valuesrI   rX   ry   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   rD   r	   r	   r
   rs   (  s    zTreeInterpreter._is_falsec                 C   s   |  | S r   )rs   r~   r	   r	   r
   r^   /  r>   zTreeInterpreter._is_truer   )(r   r   r   r   operatorr4   r5   legerL   rM   dictr7   r   r+   rF   rK   rQ   rS   rV   r[   rb   rd   re   rg   rh   rk   rl   rm   ro   rp   ru   rv   rw   rx   rz   r|   rs   r^   __classcell__r	   r	   r<   r
   r0   d   sH    
r0   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   rX   r   _visitjoin)r   r#   r$   r%   rZ   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   rD   r}   rA   r   r   z
  %s -> %s)r   rX   r)   r   r   )r   r#   rZ   rY   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&   r0   r   r	   r	   r	   r
   <module>   s    	 P