o
    �»^\*  ã                   @   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	   ú2/usr/lib/python3/dist-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%   Ú	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Úgter3   r4   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   )Úsuperr1   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 ©NrH   )r)   ÚAttributeError©r   r#   rH   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 )NrH   rE   r   r   )ÚCOMPARATOR_FUNCÚ_EQUALITY_OPSr!   r   Úfloatr   )r   r#   rH   Úcomparator_funcÚleftÚrightÚ	num_typesr	   r	   r
   Úvisit_comparatorŒ   s   þÿ
z TreeInterpreter.visit_comparatorc                 C   ó   |S r   r	   rN   r	   r	   r
   Úvisit_current    ó   zTreeInterpreter.visit_currentc                 C   s   t |d d | ƒS ©NrE   r   )r   rN   r	   r	   r
   Úvisit_expref£   s   zTreeInterpreter.visit_exprefc                 C   s:   g }|d D ]}|   ||¡}| |¡ q| j |d |¡S ©NrE   rH   )r!   Úappendr=   Úcall_function)r   r#   rH   Ú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 )NrE   r   é   r   )r!   r   ÚlistÚ_is_truer^   )r   r#   rH   ÚbaseÚcomparator_nodeÚ	collectedÚelementrb   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   re   Úextendr^   )r   r#   rH   rg   Úmerged_listrj   r	   r	   r
   Úvisit_flattenº   s   

zTreeInterpreter.visit_flattenc                 C   rX   r   r	   rN   r	   r	   r
   Úvisit_identityÇ   rZ   zTreeInterpreter.visit_identityc                 C   s2   t |tƒsd S z||d  W S  ty   Y d S w rL   )r   re   Ú
IndexErrorrN   r	   r	   r
   Úvisit_indexÊ   s   
ÿzTreeInterpreter.visit_indexc                 C   rC   rD   rF   rG   r	   r	   r
   Úvisit_index_expressionÔ   rK   z&TreeInterpreter.visit_index_expressionc                 C   s"   t |tƒsd S t|d Ž }|| S rD   )r   re   Úslice)r   r#   rH   Úsr	   r	   r
   Úvisit_sliceÚ   s   
zTreeInterpreter.visit_slicec                 C   s   |   |d d |¡S r[   rF   rN   r	   r	   r
   Úvisit_key_val_pairà   s   z"TreeInterpreter.visit_key_val_pairc                 C   s   |d S rL   r	   rN   r	   r	   r
   Úvisit_literalã   r0   zTreeInterpreter.visit_literalc                 C   s:   |d u rd S |   ¡ }|d D ]}|  ||¡||d < q|S r]   )r;   r!   ©r   r#   rH   ri   ra   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 rD   )r^   r!   rx   r	   r	   r
   Úvisit_multi_select_listî   s   z'TreeInterpreter.visit_multi_select_listc                 C   s6   |   |d d |¡}|  |¡r|   |d d |¡}|S ©NrE   r   r   ©r!   Ú	_is_false©r   r#   rH   Ú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   s2   |   |d d |¡}t|ƒtu r|dkrdS | S )NrE   r   F)r!   r   r   )r   r#   rH   Úoriginal_resultr	   r	   r
   Úvisit_not_expression  s   z$TreeInterpreter.visit_not_expressionc                 C   rC   rD   rF   rG   r	   r	   r
   Ú
visit_pipe
  rK   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   re   r^   ©r   r#   rH   rg   ri   rj   rb   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!   ÚvaluesrM   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   rH   r	   r	   r
   r}   (  s    ÿzTreeInterpreter._is_falsec                 C   s   |   |¡ S r   )r}   rŠ   r	   r	   r
   rf   /  rB   zTreeInterpreter._is_truer   )(r   r   r   r   Úoperatorr5   r6   ÚleÚgerP   rQ   Údictr:   r   r+   rJ   rO   rW   rY   r\   rc   rk   rn   ro   rq   rr   ru   rv   rw   ry   rz   r€   r�   rƒ   r„   r†   rˆ   r}   rf   Ú__classcell__r	   r	   r@   r
   r1   d   sH    ú
r1   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   )r9   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‘   r^   r’   Ú_visitÚjoin)r   r#   r$   r%   rb   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   rH   r‰   rE   r“   r   z
  %s -> %s)r‘   r^   r)   r’   r–   )r   r#   rb   ra   Ú
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   Újmespath.compatr   Únumbersr   r   r   r   r   Úobjectr   r   r&   r1   r�   r	   r	   r	   r
   Ú<module>   s    	 P