
    g'                        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(  rT edd      5 Z ej6                  e      Zddd        ed      j;                  ed      Z ee       eD ]
  Z  ee         yy# 1 sw Y   :xY w)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                    t        j                  d|  dd      }t        j                         }|j                  |       |j	                  |       t        j
                  |       }|j                  |       |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        F/var/www/openai/venv/lib/python3.12/site-packages/jsonpath/__init__.pycreate_loggerr      s~       
%dV=9CXH ##%GU"t$F
OOE
gM    jsonpath
PYLOGLEVELINFOc                       e Zd Zy)ExprSyntaxErrorN)__name__
__module____qualname__ r   r   r   r   )   s    r   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/y2)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                 .   | j                  |      }|j                  t        j                        | _        t        | j                        | _        t        j                  d| j                          t        j                  d      j                  | _        y )Nzsegments  :    )_parse_exprsplitr!   SEPr&   lenr'   r   debugsys	_getframe	f_globalscaller_globalsselfr+   s     r   __init__zJSONPath.__init__R   sd    %

8<<0'
|DMM?34!mmA.88r   r"   c                 6   t        |t        t        f      st        d      |t        j
                  vr3t        dt        t        j
                  j                                      || _	        || _
        g | _        | j                  |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-eH4H4H4M4M4O.P-QR  '"CC {{r   c                 &    | j                  ||      S N)rF   )r8   rE   r)   s      r   searchzJSONPath.searchj   s    zz#{++r   c                    t         j                  d|        t        j                  j	                  | j
                  |      }t        j                  j	                  | j                  |      }t        j                  j	                  | j                  |      }t        j                  j	                  | j                  |      }t        j                  j	                  t        j                   dt        j                   |      }t        j                  j	                  t        j                  |      }t        j                  j	                  | j                   |      }t        j"                  j	                  | j$                  |      }t        j&                  j	                  | j(                  |      }t        j*                  j	                  | j,                  |      }|j/                  d      r|dd  }t         j                  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   ss   ~dV,-%%))$//4@))--d.A.A4H''++D,=,=tD%%))$//4@%%))X\\N"X\\N*KTR##HLL$7%%))$//4@''++D,=,=tD))--d.A.A4H%%))$//4@??4 8D~dV,-r   c                     t        | j                  d         }| j                  d   j                  |j                  d             d| S Nz#Qr-   r1   subxappendgroupr8   mns      r   rO   zJSONPath._get_quote   s=    		$ 		$qwwqz*A3xr   c                 V    | j                   d   t        |j                  d               S rb   rd   intrf   r8   rh   s     r   r_   zJSONPath._put_quote   !    yys1771://r   c                     t        | j                  d         }| j                  d   j                  |j                  d             d| dS )N#BQr-   z`#BQ`rc   rg   s      r   rQ   zJSONPath._get_backquote   sB    		% !		%
+aS{r   c                 V    | j                   d   t        |j                  d               S )Nrp   r-   rk   rm   s     r   r]   zJSONPath._put_backquote   s"    yyAGGAJ00r   c                     t        | j                  d         }| j                  d   j                  |j                  d             d| S )N#Br-   z.#Brc   rg   s      r   rS   zJSONPath._get_bracket   s>    		$ 		$qwwqz*QCyr   c                 V    | j                   d   t        |j                  d               S )Nrt   r-   rk   rm   s     r   r[   zJSONPath._put_bracket   rn   r   c                     t        | j                  d         }| j                  d   j                  |j                  d             d| dS )N#Pr-   z(#P)rc   rg   s      r   rU   zJSONPath._get_paren   s@    		$ 		$qwwqz*QCqzr   c                 V    | j                   d   t        |j                  d               S )Nrw   r-   rk   rm   s     r   rY   zJSONPath._put_paren   rn   r   c                 d    d}| j                  d      j                  d      D ]
  }|d|z  z  } |S )N__objr-   .z["%s"])rf   r/   )rh   retes      r   _gen_objzJSONPath._gen_obj   s7    !!#&A8a<C '
r   ipathc                    t        |t              r3t        |      D ]$  \  }} | ||| t        j                   | g|  & y t        |t
              r8|j                         D ]$  \  }} | ||| t        j                   | g|  & y y rH   )r<   r=   	enumerater!   r0   r>   items)r%   rE   r   r   argsidxvks           r   	_traversezJSONPath._traverse   s    c4 #C.Q!Q4&se4<t< )T"		1!Q4&qc2:T: $ #r   Fconvert_number_strrE   c                P   | }|j                  d      D ]  }	 |j                  |      } |r7t        |t              r'	 |j                         rt        |      S t        |      S |S # t        t        f$ r }t        j                  |       Y d }~ y d }~ww xY w# t        $ r Y |S w xY w)Nr|   )r/   getAttributeErrorKeyErrorr   errorr<   strisdigitrl   floatrA   )rE   r   r   rr   errs         r   _getattrzJSONPath._getattr   s    CAEE!H ! *Q"499;q6MQx  #H- S!  s.   A&B 
B &B5BB	B%$B%c                     |j                  d      d d d   D ]?  }|j                  d      r| j                  |fdd       +| j                  |fd       A y )	N,~c                 >    t         j                  | 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                 8    t         j                  | 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   se    mmC(2.F  %$*  !	   $*    /r   stepc                     d}	 | j                  |d d|i      }|r| j	                  |||       y y # t        $ r}t        j                  |       Y d }~:d }~ww xY w)NFr{   )r*   	Exceptionr   r   rD   )r8   rE   r   r   r   r   r   s          r   _filterzJSONPath._filter   s]    	tTGS>:A KKQ%   	LL	s   0 	AAAc                 N	   || j                   k\  rq| j                  dk(  r| j                  j                  |       n*| j                  dk(  r| j                  j                  |       t        j                  d| d|        y| j                  |   }|dk(  r"| j                  | j                  ||dz   |       y|dk(  r5| j                  ||dz   |       | j                  | j                  |||       yt        |t              rW|j                         rGt        |      }|t        |      k  r-| j                  ||   |dz   | t        j                   |        yt        |t               r2||v r.| j                  ||   |dz   | t        j                   |        yt        |t              r}t        j"                  j%                  |      r^t        t'        |            }| j)                  d	| d
      }|D ]/  \  }}| j                  ||dz   | t        j                   |        1 yt        |t               rht        j*                  j%                  |      rI|j-                  d      D ]4  }	|	|v s| j                  ||	   |dz   | t        j                   |	        6 y|j/                  d      rc|j1                  d      rR|dd }t        j2                  j5                  | j6                  |      }| j                  | j8                  ||dz   ||       y|j/                  d      r|j1                  d      rt        |t              r^t        t'        |            }| j;                  ||dd        |D ]/  \  }}| j                  ||dz   | t        j                   |        1 yt        |t               rct        |j=                               }| j;                  ||dd        |D ]/  \  }	}| j                  ||dz   | t        j                   |	        1 yt?        d      |j/                  d      rt|j1                  d      rbt        |t               rGi }
|dd j-                  d      D ]  }	| jA                  ||	      |
|	<    | j                  |
|dz   |       yt?        d      yy)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(LL6$z#78}}Q 3;NN4;;QUD9 4<KKQUD)NN4;;Q5 c4 T\\^t9Dc#hCIq1ux||nTF.KL c4 TS[KKD	1q5TF8<<.*GH c4 X%?%?%I%I$%Oy~&C>>Da.1DQAq1ux||nSE&BC  c4 X%@%@%J%J4%PZZ_8KKAA$~aS/IJ %  ??4 T]]3%7":D..224==$GDNN4<<a!eT4@ ??4 T]]3%7#t$9S>*S$q*-!FCKK1q5TF8<<.*FG "  C&399;'S$q*-DAqKK1q5TF8<<.*DE    &&JKK ??3DMM#$6#t$a))#.A"mmC3DG /D!a%.  &&KLL %7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BJJw'Mbjj+,G BJJ~.MBJJz*M"

>2"

;/ bjj!12O bjj,OBJJ/0MBJJz*M #

#BC#$?@#C
 GNJtDL9S 9 &-  ,,
0
1
0
0   ;S ; ; ; =B d #  "   &c & &C &ZS Zr   r!   c                     t        |       S rH   )r!   )r+   s    r   r   r   <  s    D>r   c                 f    | t         vrt        |       t         | <   t         |    j                  |      S rH   )_jsonpath_cacher!   rF   )r+   datas     r   rI   rI   D  s.    ?" (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? $ 
z9299\6#B	C	i 	L L^
 - z	 $	'1DIIaL 
(-.44Q@A	!Ha  	'	's   CC