
    'Xh4                         d dl Z d dlmZmZ d dlmZmZmZ ddee	ef   de	de
deee      fdZd	edee j                     fd
Zy)    N)AnyOptional)JsonPathItemJsonPathItemTypeparse_json_pathpayloadkeyflatreturnc                 z    t        |      }g dt        dt        t           ddffd | |       rS dS )aA  
    Get value from payload by key.
    Args:
        payload: arbitrary json-like object
        flat: If True, extend list of values. If False, append. By default, we use True and flatten the arrays,
            we need it for filters, however for `count` method we need to keep the arrays as is.
        key:
            Key or path to value in payload.
            Examples:
                - "name"
                - "address.city"
                - "location[].name"
                - "location[0].name"

    Returns:
        List of values or None if key not found.
    datak_listr   Nc                    |sy |j                  d      }t        |      dk(  r%t        | t              rp|j                  t
        j                  k(  rS|j                  | v r| |j                     }t        |t              rrj                  |       y j                  |       y t        | t              r|j                  t
        j                  k(  rj                  |        y |j                  t
        j                  k(  rF|j                  J |j                  t        |       k  rj                  | |j                            y y y y y |j                  t
        j                  k(  rEt        | t              sy |j                  | v r% | |j                     |j                                y y |j                  t
        j                  k(  r]|j                  J t        | t              sy |j                  t        |       k  r% | |j                     |j                                y y |j                  t
        j                  k(  r0t        | t              sy | D ]  } ||j                                 y y )Nr   )poplen
isinstancedict	item_typer   KEYr	   listextendappendWILDCARD_INDEXINDEXindexcopy)r   r   current_keyvalueitem
_get_valuer
   results        U/RAG/venv/lib/python3.12/site-packages/qdrant_client/local/payload_value_extractor.pyr    z value_by_key.<locals>._get_value    s   jjmv;!$%+*?*?CSCWCW*W??d* 1E!%.4e,e,D$'((,<,K,KKMM$' **.>.D.DD&,,888"((3t94d;+<+<&=> 5 E	 ( +" ""&6&:&::dD)$&40&++-@ ' ""&6&<&<<$$000dD)  3t9,4 1 12FKKMB - ""&6&E&EEdD)4/ 	 F    )r   r   r   r   )r   r	   r
   keysr    r!   s     ` @@r"   value_by_keyr%      sM    $ 3DF-0 -0d<&8 -0T -0^ w6%%r#   r   c                 ^    	 t        j                  t        |             S # t        $ r Y yw xY w)zI
    Parse UUID from value.
    Args:
        value: arbitrary value
    N)uuidUUIDstr
ValueError)r   s    r"   
parse_uuidr+   S   s,    yyU$$ s     	,,)T)r'   typingr   r   $qdrant_client.local.json_path_parserr   r   r   r   r)   boolr   r%   r(   r+    r#   r"   <module>r0      sl       E&$sCx. E&s E&$ E&(SWX[S\J] E&P	c 	htyy1 	r#   