
    Xis.                        d Z ddlmZ dZdZdZddlZddlZdgZej	        d         dk    re
Zd	 ZddZedk    r 	 ddlZn# e$ r ddlZY nw xY wddlZ eej                  dk     s eej                  dk    r*ej                            d            ej        d            ej         eej        d                             Zej        d         Zd
Z eej                  dk    rej        d         Z eeee          Zes ej        d           ej        Z ej        eedd           e                    d            ej        d           dS dS )a  
An XPath for JSON

A port of the Perl, and JavaScript versions of JSONPath
see http://goessner.net/articles/JsonPath/

Based on on JavaScript version by Stefan Goessner at:
        https://goessner.net/articles/JsonPath/
        http://code.google.com/p/jsonpath/
and Perl version by Kay Rhodes at:
        http://github.com/masukomi/jsonpath-perl/

Python3 compatibily by Per J. Sandstrom
    )print_functionz
Phil Budnez$Revision: 1.20 $z0.82.2Njsonpath   c                     g fd}t          j        d||           } t          j        dd|           } t          j        dd|           } t          j        dd|           } fd	}t          j        d
||           } | S )z@normalize the path expression; outside jsonpath to allow testingc                     t                    }|                     d          }                    |           d|z  }|S )N   z[#%d])lengroupappend)mng1retsubxs       3/usr/local/lib/python3.11/dist-packages/jsonpath.pyf1znormalize.<locals>.f1M   s:    IIWWQZZBk
    z[\['](\??\(.*?\))[\]']z'?(?<!@)\.'?|\['?;z;;;|;;z;..;z
;$|'?\]|'$ c                 X    |                      d          }t          |                   S )Nr   )r
   int)r   r   r   s     r   f2znormalize.<locals>.f2^   s"    WWQZZCGG}r   z	#([0-9]+))resub)xr   r   r   s      @r   	normalizer   G   s    D     	("a00A 	#S!,,A
y&!$$A
}b!$$A    
 	|R##AHr   VALUETc                 L  	
 d d 		fd
fd	fdd 	fdt          j        d          j        g 
|rR| rPt          |          }|                    d	          r
|d
d         } || d           t          
          dk    r
S dS )zCtraverse JSON object using jsonpath expr, returning values or pathsc                 F    t          |           dz   t          |          z   S )zconcatenate path elementsr   )strr   ys     r   szjsonpath.<locals>.sj   s    1vv|c!ff$$r   c                 *    |                                  S )z.check if argument represents a decimal integer)isdigit)r   s    r   isintzjsonpath.<locals>.isintn   s    yy{{r   c                     d}|                      d          dd         D ]} |          r	|d|z  z  }|d|z  z  }|S )zZconvert internal path representation to
           "full bracket notation" for PATH output$r   r   N[%s]['%s'])split)pathppiecer&   s      r   as_pathzjsonpath.<locals>.as_pathr   sd     ZZ__QRR( 	& 	&E uU|| &Ve^#X%%r   c                     dk    r                     |           nUdk    r1                     |                     d          dd                     n                      |                      | S )Nr   IPATHr   r   )r   r+   )r,   objectr/   resultresult_types     r   storezjsonpath.<locals>.store   su    '!!MM&!!!!G##MM$**S//!""-....MM''$--(((r   c                    rt          d| d|           | r|                     d          }|d         }d                    |dd                    }rt          d|t          |                     |dk    rfd} |||||           d S |d	k    r% |||           fd
} |||||           d S |dk    rfd} |||||           d S t	          |t
                    r#||v r |||          ||                     d S t	          |t                    rn |          rct          |          }rt          d|t          |                     t          |          |k    r |||          ||                     d S d S |	                    d          rP|
                    d          r;dk    rt          d|            ||          }	  |	|          ||           d S |	                    d          rN|
                    d          r9dk    rt          d|           fd}
|dd         } |||||
           d S t          j        d|          }|rt	          |t
          t          f          rd }d }t          |          }|                    d          }|                    d          }|                    d          }|rt          |          nd}|rt          |          n|}|rt          |          nd}|dk     r |d||z             }n |||          }|dk     r |d||z             }n |||          }t          |||          D ]}  ||          ||           d S |                    d          dk    rEt          j        d|          D ]1}dk    rt          d|             ||          ||           0d S d S  ||           d S )Ntrace/r   r   r   	*c                 h    dk    rt          d| |||             | |          ||           d S )Nr   z	f03)printkeylocexprobjr,   debugr#   r7   s        r   f03z$jsonpath.<locals>.trace.<locals>.f03   sE    qyy%c4"F"F"FE!!C,,T22222r   ..c                 :   dk    rt          d| |||           t          |t                    r/| |v r)  d|          ||           ||                      d S d S | t          |          k     r)  d|          ||           ||                      d S d S )Nr   z	f04rD   )r<   
isinstancedictr	   r=   s        r   f04z$jsonpath.<locals>.trace.<locals>.f04   s    qyy%c4"F"F"F!#t,, I#::!E!!D$--S11T3<<HHHHH &: S>>!E!!D$--S11T3<<HHHHH *>r   !c                 P    t          |t                    r || |           d S d S N)rF   rG   )r>   r?   r@   rA   r,   r7   s        r   f06z$jsonpath.<locals>.trace.<locals>.f06   s9    !#t,, /dC...../ /r   z----->()indexz?(filterc                     dk    rt          d| |||           t          |t                    r |||                    }n ||t          |                              }|r 	 | |          ||           d S d S )Nr   f05)r<   rF   rG   r   )
r>   r?   r@   rA   r,   eval_resultrB   evalxr#   r7   s
         r   rR   z$jsonpath.<locals>.trace.<locals>.f05   s     199eE3T4&H&H&H%c400 D*/%SX*>*>KK*/%SS]*C*CK& ;!E!!C,,T:::::; ;r      z"(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)$c                     | |k    r| S |S rK    r!   s     r   maxz$jsonpath.<locals>.trace.<locals>.max        1uu'(#$Hr   c                     | |k     r| S |S rK   rX   r!   s     r   minz$jsonpath.<locals>.trace.<locals>.min   rZ   r   r   ,z'?,'?r.   )r<   r+   jointyperF   rG   listr   r	   
startswithendswithr   matchr
   xrangefind)r@   rA   r,   r   r?   rC   rH   rL   ilocerR   r   rY   r\   objlens0s1s2startendstepir.   rB   rT   r&   r#   r5   r7   walks                          r   r7   zjsonpath.<locals>.trace   s:   1%sD111 e	

3AA$C122A1eD#tCyy111czz3 3 3 3 3 3 3 S!S$,,,,,ad###I I I I I I I S!S$,,,,,/ / / / / S!S$,,,,,C&& H63#::aS11T3<<00000C&& F655:: F63xx9%$C999s88d??E!SY$55555 #? >>#&& 3<<+<+< qyy%"5"5"5c3AE!!Aa&&#t,,,F >>$'' CLL,=,= qyy%#"6"6"6; ; ; ; ; ; ; ; ad)CDadC000FHBCHH !!#d|44 6% % %
% % %
 "%SWWQZZWWQZZWWQZZ ,. 4B1)+7c"ggg*,3s2www! 199$'C5<$8$8EE$'C$6$6E77"%#aV"4"4CC"%#fc"2"2C!'sD!9!9 6 6A!E!!Aq''35555F 88C==A%%!#(C!8!8 6 6 199eGU&;&;&;aaqkk35555	 &%6 6 E$r   c                     t          |t                    r1t          dt          |                    D ]} ||| |||           d S t          |t                    r|D ]} ||| |||           d S d S )Nr   )rF   r`   rd   r	   rG   )r?   r@   rA   r,   functro   r>   s          r   rp   zjsonpath.<locals>.walk   s    c4   	1As3xx(( / /adC..../ /T"" 	1 1 1c3c40000	1 	11 1r   c                    rt          d|            |                     dd          } |                     dd                              dd          } d }t          j        d	||           } fd
}t          j        d||           } t          j        dd|                               dd          } 	s rt          d           t	          d          rt          d|            	 t          | d|i          }n6# t          $ r)}rt          t          |                     Y d}~dS d}~ww xY wrt          d|           |S )zeval expressionrT   z@.lengthz
len(__obj)z&&z and z||z or c                 2    d|                      d          z  S )Nz'%s' not in __objr   )r
   )r   s    r   notvarz'jsonpath.<locals>.evalx.<locals>.notvar  s    &33r   z!@\.([a-zA-Z@_0-9-]*)c                     fd}|                      d          }|                    d          }|d         dk    rd ||dd                   z  S  ||dd                    S )Nc                 N    d}| D ]} |          r	|d|z  z  }|d|z  z  }|S )N__objr)   r*   rX   )eltsr   rg   r&   s      r   bracketsz;jsonpath.<locals>.evalx.<locals>.varmatch.<locals>.brackets  sL     , ,AuQxx ,vz)x!|+
r   r   .rV   lengthzlen(%s))r
   r+   )r   rz   r   ry   r&   s       r   varmatchz)jsonpath.<locals>.evalx.<locals>.varmatch  s         B88C==DBx8## 88D2J#7#7778DH%%%r   z(?<!\\)(@\.[a-zA-Z@_.0-9]+)z(?<!\\)@rx   z\@@zeval disabledevalNFz->)r<   replacer   r   	Exceptionr   repr)
r?   rA   ru   r}   vrg   caller_globalsrB   r&   use_evals
         r   rT   zjsonpath.<locals>.evalx   s~    %%%%% kk*l33kk$((00v>>	4 	4 	4f-vs;;	& 	& 	& 	& 	& f3XsCC f['3//77sCC 	-,eO,,,O,,,$%$$$	S.7C.99AA 	 	 	$eDGGnnn55555	  %a...s   'C; ;
D.D))D.r   z$;rU   Nr(   r   F)sys	_getframe	f_globalsr   ra   r	   )rA   r@   r4   rB   r   cleaned_exprr/   r   rT   r&   r3   r#   r5   r7   rp   s     ``` @@@@@@@@@r   r   r   g   si   % % %            g g g g g g g g g g gR1 1 15 5 5 5 5 5 5 5t ]1%%/NF 	 	 ""4(( 	,'+L 	lC%%%v;;??M5r   __main__   z+Usage: jsonpath.py FILE PATH [OUTPUT_TYPE]
r   rU   )	sort_keysindent
)r   r   T)__doc__
__future__r   
__author____revision____version__r   r   __all__version_inforangerd   r   r   __name__jsonImportError
simplejsonr	   argvstdoutwriteexitloadopenr2   r,   formatvaluefdumprX   r   r   <module>r      s    & % % % % %
"8 
			 



 . A!F  @Y Y Y Yv z" " " "!!!!!!" JJJ s38}}qCCMMA--
GHHHTYttCHQK(())F8A;DF
s38}}q!HVT6**E 
ADIeQ$q1111GGDMMMCHQKKKKK? s   A 	AA