
    Ng'                        d Z dZdZddlZddlZddlZddlZddlZddlm	Z	 ddl
mZ dej        fdedeeef         fd	Z ed
 ej        dd                    Z G d de          Z G d d          Zd Zi ad Zedk    rn edd          5 Z ej        e          Zddd           n# 1 swxY w Y    ed                              ed          Z ee           eD ]Z  ee            dS dS )z
Author       : zhangxianbing
Date         : 2020-12-27 09:22:14
LastEditors  : zhangxianbing
LastEditTime : 2022-03-14 10:33:55
Description  : JSONPath
z1.0.6zhangxianbing    N)defaultdict)Unionnamelevelc                 0   t          j        d|  dd          }t          j                    }|                    |           |                    |           t          j        |           }|                    |           |                    |           |S )z,Get or create a logger used for local debug.z%(asctime)s-%(levelname)s-[z] %(message)sz[%Y-%m-%d %H:%M:%S])datefmt)logging	FormatterStreamHandlersetLevelsetFormatter	getLogger
addHandler)r   r   formaterhandlerloggers        M/var/www/html/ai-engine/env/lib/python3.11/site-packages/jsonpath/__init__.pycreate_loggerr      s      9d999CX  H #%%GU"""t$$F
OOE
gM    jsonpath
PYLOGLEVELINFOc                       e Zd ZdS )ExprSyntaxErrorN)__name__
__module____qualname__ r   r   r   r   )   s        Dr   r   c                      e Zd ZU dddZdZ ej        d          Z ej        d          Z ej        d          Z	 ej        d          Z
 ej        d	          Z ej        d
          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Z ej        d          Zeed<   eed<   eed<    ee          Zeed<   eed<   eed<   defdZdefdZd3dZd Zd Z d Z!d  Z"d! Z#d" Z$d# Z%d$ Z&d% Z'e(d&             Z)e(d'ed(efd)            Z*e(d*d+d,e+d(efd-            Z,e(d.             Z-d'ed(ed/efd0Z.d'efd1Z/d2S )4JSONPathzA list of specific values.zAll path of specific values.)VALUEPATH;z\.\.z(?<!\.)\.(?!\.)z['](.*?)[']z#Q(\d+)z[`](.*?)[`]z#BQ(\d+)z[\[](.*?)[\]]z#B(\d+)z[\(](.*?)[\)]z#P(\d+)z^(-?\d*)?:(-?\d*)?(:-?\d*)?$z^([\w.']+)(, ?[\w.']+)+$z8@\.(.*?)(?=<=|>=|==|!=|>|<| in| not| is)|len\(@\.(.*?)\)fsegmentslpathresultresult_type	eval_funcexprc                 *   |                      |          }|                    t          j                  | _        t          | j                  | _        t                              d| j                    t          j
        d          j        | _        d S )Nzsegments  :    )_parse_exprsplitr!   SEPr&   lenr'   r   debugsys	_getframe	f_globalscaller_globalsselfr+   s     r   __init__zJSONPath.__init__R   ss    %%

8<00''
3DM33444!mA..8r   r"   c                 P   t          |t          t          f          st          d          |t          j        vr;t          dt          t          j                                                             || _	        || _
        g | _        |                     |dd           | j        S )Nzobj must be a list or a dict.zresult_type must be one of r   $)
isinstancelistdict	TypeErrorr!   RESULT_TYPE
ValueErrortuplekeysr)   r*   r(   _trace)r8   objr)   r*   s       r   parsezJSONPath.parseZ   s    #d|,, 	=;<<<h222ReH4H4M4M4O4O.P.PRR   '"CC   {r   c                 .    |                      ||          S N)rF   )r8   rE   r)   s      r   searchzJSONPath.searchj   s    zz#{+++r   c                    t                               d|            t          j                            | j        |          }t          j                            | j        |          }t          j                            | j	        |          }t          j
                            | j        |          }t          j                            t          j         dt          j         |          }t          j                            t          j        |          }t          j                            | j        |          }t          j                            | j        |          }t          j                            | j        |          }t          j                            | j        |          }|                    d          r
|dd          }t                               d|            |S )Nzbefore expr : ..z$;   zafter expr  : )r   r2   r!   REP_GET_QUOTEsub
_get_quoteREP_GET_BACKQUOTE_get_backquoteREP_GET_BRACKET_get_bracketREP_GET_PAREN
_get_parenREP_DOUBLEDOTr0   REP_DOTREP_PUT_PAREN
_put_parenREP_PUT_BRACKET_put_bracketREP_PUT_BACKQUOTE_put_backquoteREP_PUT_QUOTE
_put_quote
startswithr7   s     r   r.   zJSONPath._parse_exprm   sv   ,d,,---%))$/4@@)--d.A4HH'++D,=tDD%))$/4@@%))X\*K*KX\*K*KTRR##HL$77%))$/4@@'++D,=tDD)--d.A4HH%))$/4@@??4   	8D,d,,---r   c                     t          | j        d                   }| j        d                             |                    d                     d| S Nz#Qr-   r1   subxappendgroupr8   mns      r   rO   zJSONPath._get_quote   sD    	$  	$qwwqzz***Axxr   c                 h    | j         d         t          |                    d                             S rb   rd   intrf   r8   rh   s     r   r_   zJSONPath._put_quote   #    ys1771:://r   c                     t          | j        d                   }| j        d                             |                    d                     d| dS )N#BQr-   z`#BQ`rc   rg   s      r   rQ   zJSONPath._get_backquote   sI    	% !!	%

+++a{{{r   c                 h    | j         d         t          |                    d                             S )Nrp   r-   rk   rm   s     r   r]   zJSONPath._put_backquote   s$    yAGGAJJ00r   c                     t          | j        d                   }| j        d                             |                    d                     d| S )N#Br-   z.#Brc   rg   s      r   rS   zJSONPath._get_bracket   sE    	$  	$qwwqzz***Qyyr   c                 h    | j         d         t          |                    d                             S )Nrt   r-   rk   rm   s     r   r[   zJSONPath._put_bracket   rn   r   c                     t          | j        d                   }| j        d                             |                    d                     d| dS )N#Pr-   z(#P)rc   rg   s      r   rU   zJSONPath._get_paren   sG    	$  	$qwwqzz***Qzzzr   c                 h    | j         d         t          |                    d                             S )Nrw   r-   rk   rm   s     r   rY   zJSONPath._put_paren   rn   r   c                 p    d}|                      d                              d          D ]
}|d|z  z  }|S )N__objr-   .z["%s"])rf   r/   )rh   retes      r   _gen_objzJSONPath._gen_obj   sC    !!#&& 	  	 A8a<CC
r   ipathc                 ,   t          |t                    r2t          |          D ] \  }} | ||| t          j         | g|R   !d S t          |t
                    r5|                                D ]"\  }} | ||| t          j         | g|R   !d S d S rH   )r<   r=   	enumerater!   r0   r>   items)r%   rE   r   r   argsidxvks           r   	_traversezJSONPath._traverse   s    c4   	;#C.. = =Q!Q444s44<t<<<<<= =T"" 	;		 ; ;1!Q422q22:T:::::	; 	;; ;r   Fconvert_number_strrE   c                   | }|                     d          D ]R}	 |                    |          }# t          t          f$ r&}t                              |           Y d }~ d S d }~ww xY w|rXt          |t                    rC	 |                                rt          |          S t          |          S # t          $ r Y nw xY w|S )Nr|   )r/   getAttributeErrorKeyErrorr   errorr<   strisdigitrl   floatrA   )rE   r   r   rr   errs         r   _getattrzJSONPath._getattr   s    C 	 	AEE!HH"H-   S!!!tttttt  	*Q"4"4 	99;; "q66MQxx   s-   1A(A##A("B5 &B5 5
CCc                     |                     d          d d d         D ]K}|                    d          r|                     |fdd           2|                     |fd           Ld S )	N,~c                 X    t                               | d         |dd          d          S Nr-   Tr   r!   r   tr   s     r   <lambda>z"JSONPath._sorter.<locals>.<lambda>   s.    H,=,=!ae -> - - r   T)keyreversec                 H    t                               | d         |d          S r   r   r   s     r   r   z"JSONPath._sorter.<locals>.<lambda>   s&    H,=,=!aD -> - - r   )r   )r/   r`   sort)rE   sortbyssortbys      r   _sorterzJSONPath._sorter   s    mmC((2. 	 	F  %% $*    !	      $*        	 	r   stepc                     d}	 |                      |d d|i          }n1# t          $ r$}t                              |           Y d }~nd }~ww xY w|r|                     |||           d S d S )NFr{   )r*   	Exceptionr   r   rD   )r8   rE   r   r   r   r   r   s          r   _filterzJSONPath._filter   s    	tTGS>::AA 	 	 	LL	 	&KKQ%%%%%	& 	&s    
AAAc                 
   || j         k    rm| j        dk    r| j                            |           n%| j        dk    r| j                            |           t                              d| d|            dS | j        |         }|dk    r"|                     | j        ||dz   |           dS |dk    r9|                     ||dz   |           |                     | j        |||           dS t          |t                    rh|                                rTt          |          }|t          |          k     r0|                     ||         |dz   | t          j         |            dS t          |t                     r6||v r2|                     ||         |dz   | t          j         |            dS t          |t                    rt          j                            |          rit          t'          |                    }|                     d	| d
          }|D ]/\  }}|                     ||dz   | t          j         |            0dS t          |t                     rmt          j                            |          rN|                    d          D ]6}	|	|v r0|                     ||	         |dz   | t          j         |	            7dS |                    d          rg|                    d          rR|dd         }t          j                            | j        |          }|                     | j        ||dz   ||           dS |                    d          r0|                    d          rt          |t                    rmt          t'          |                    }|                     ||dd                    |D ]/\  }}|                     ||dz   | t          j         |            0nt          |t                     rrt          |                                          }|                     ||dd                    |D ]/\  }	}|                     ||dz   | t          j         |	            0nt?          d          dS |                    d          r|                    d          r~t          |t                     rVi }
|dd                             d          D ]}	|                      ||	          |
|	<   |                     |
|dz   |           nt?          d          dS dS dS )zPerform operation on object.

        Args:
            obj ([type]): current operating object
            i (int): current operation specified by index in self.segments
        r"   r#   zpath: z
 | value: N*r-   rK   zobj[]r   z?(rx   rL   r   z/(z"sorter must acting on list or dict(z#field-extractor must acting on dict)!r'   r)   r(   re   r   r2   r&   r   rD   r<   r=   r   rl   r1   r!   r0   r>   REP_SLICE_CONTENT	fullmatchr   r*   REP_SELECT_CONTENTr/   r`   endswithREP_FILTER_CONTENTrN   r   r   r   r   r   r   )r8   rE   r   r   r   ikeyvalsr   r   r   obj_s              r   rD   zJSONPath._trace   s|    
??7**""3''''!V++""4(((LL7$77#77888F}Q 3;;NN4;QUD999F 4<<KKQUD)))NN4;Q555F c4   	T\\^^ 	t99Dc#hhCIq1u.Kx|.KT.K.KLLLF c4   	TS[[KKD	1q5T*G8<*G*G*GHHHF c4   	X%?%I%I$%O%O 	y~~&&C>>....11D D DQAq1u&Bx|&BS&B&BCCCCF c4   	X%@%J%J4%P%P 	ZZ__ K K88KKAA$/I/Ia/I/IJJJF ??4   	T]]3%7%7 	":D.224=$GGDNN4<a!eT4@@@F ??4   	T]]3%7%7 	#t$$ L9S>>**S$qt*---! H HFCKK1q5T*F8<*F*F*FGGGGHC&& L399;;''S$qt*--- F FDAqKK1q5T*D8<*D*D*DEEEEF &&JKKKF ??3 		DMM#$6$6 		#t$$ Mad))#.. 4 4A"mmC33DGGD!a%....%&KLLLF		 		 		 		r   N)r"   )0r   r   r   r@   r0   recompilerV   rW   rM   r^   rP   r\   rR   rZ   rT   rX   r   r   r   r=   __annotations__rl   r   rd   r   callabler9   evalrF   rI   r.   rO   r_   rQ   r]   rS   r[   rU   rY   staticmethodr   r   r>   r   r   r   rD   r   r   r   r!   r!   -   s'        -. K CBJw''Mbj+,,G BJ~..MBJz**M"
>22"
;// bj!122O bj,,OBJ/00MBJz**M #
#BCC#$?@@#C 
 GGGNNNJJJ;tDLLL9S 9 9 9 9 &-     , , , ,  ,  
0 0 0  
1 1 1  
0 0 0  
0 0 0   \ ;S ; ; ; ; \; =B   d #    \"   \ &c & &C & & & &ZS Z Z Z Z Z Zr   r!   c                      t          |           S rH   )r!   )r+   s    r   r   r   <  s    D>>r   c                     | t           vrt          |           t           | <   t           |                              |          S rH   )_jsonpath_cacher!   rF   )r+   datas     r   rI   rI   D  s6    ?"" (4 &&t,,,r   __main__ztest/data/2.jsonrbz$.scores[/(score)].(score)r"   )!__doc____version__
__author__jsonr
   osr   r3   collectionsr   typingr   r   r   rl   r   getenvr   r   r   r!   r   r   rI   r   openr%   loaddrF   Dprintr   r   r   r   <module>r      s#    
   				 				 



 # # # # # #       #W\   5c?    $ 
z929\6#B#B	C	C	 	 	 	 	i 	 	 	L L L L L L L L^  
 - - - z	 $	'	' 1DIaLL              -..44Q@@A	E!HHH  a 
 s   B,,B03B0