o
    1 i$                     @   s  d dl Z d dl mZmZ d dlmZmZmZmZ d dlZ	d dl
mZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d	ed
edefddZ deegee f de	j!j"fddZ#de	j!j"deeeeef  fddZ$de	j!j"defddZ%de	j!j"defddZ&deegef de	j!j"fddZ'deeeeef  dedeeeeef  fddZ(d ee) d!eeeeef  d"ed#edee) f
d$d%Z*dS )&    N)asdictfields)	AwaitableCallableListTuple)rest_response)HTTPStatusCode)DEFAULT_LIMITDEFAULT_RPC_TIMEOUTRAY_MAX_LIMIT_FROM_API_SERVERListApiOptionsListApiResponsePredicateTypeStateSchemaSummaryApiOptionsSummaryApiResponseSupportedFilterTypefilter_fields)DataSourceUnavailable)convert_string_to_typesuccesserror_messageresultc                 K   s$   t d| rtjntj||dd|S )NF)status_codemessager   Zconvert_google_style )r   r	   OKINTERNAL_ERROR)r   r   r   kwargsr   r   i/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/ray/dashboard/state_api_utils.pydo_reply   s   r!   list_api_fnreqc              
      sb   z| t |dI d H }tddt|dW S  ty0 } ztdt|d dW  Y d }~S d }~ww )NoptionT r   r   r   F)options_from_reqr!   r   r   str)r"   r#   r   er   r   r    handle_list_api$   s   r+   returnc                 C   sn   | j dg }| j dg }| j dg }t|t|ksJ g }t|||D ]\}}}||||f q'|S )Nfilter_keysfilter_predicatesfilter_values)queryZgetalllenzipappend)r#   r-   r.   r/   filterskey	predicatevalr   r   r    _get_filters_from_req3   s   r8   c                 C   s   t | jddur| jdnt}|tkr!td| dt dt | jdd}t| }t| jdd	t}t| jd
dt}t	|||||dS )z1Obtain `ListApiOptions` from the aiohttp request.limitNzGiven limit z exceeds the supported limit z. Use a lower limit.timeout   detailFexclude_driverT)r9   r:   r4   r<   r=   )
intr0   getr
   r   
ValueErrorr8   r   boolr   )r#   r9   r:   r4   r<   r=   r   r   r    r(   @   s(   r(   c                 C   s6   t | jdt}t| }| jdd }t|||dS )Nr:   
summary_by)r:   r4   rB   )r>   r0   r?   r   r8   r   )r#   r:   r4   rB   r   r   r    summary_options_from_reqZ   s   rC   
summary_fnc                    s(   | t |dI d H }tddt|dS )Nr$   Tr&   r'   )rC   r!   r   )rD   r#   r   r   r   r    handle_summary_apia   s   rE   filterschemac                 C   sp  g }t |rdd t|D }n| }| D ]\}}}||v r|| }zt|| W n	 ty4   Y nyw t||r;nr|tu sC|dkr`zt|t}W nb ty_   td| d| d| dw |t	u sh|dkrzt|t	}W n= ty   td| d| d	| d
w |t
u s|dkrzt|t
}W n ty   td| d| d| d| d	w ||||f q|S )a  Convert the given filter's type to SupportedFilterType.

    This method is necessary because click can only accept a single type
    for its tuple (which is string in this case).

    Args:
        filter: A list of filter which is a tuple of (key, val).
        schema: The state schema. It is used to infer the type of the column for filter.

    Returns:
        A new list of filters with correct types that match the schema.
    c                 S   s   i | ]}|j |jqS r   )nametype).0fieldr   r   r    
<dictcomp>   s    z(convert_filters_type.<locals>.<dictcomp>integerzInvalid filter `--filter  zD` for a int type column. Please provide an integer filter `--filter z [int]`numberzF` for a float type column. Please provide an integer filter `--filter z	 [float]`booleanz6` for a boolean type column. Please provide `--filter z& [True|true|1]` for True or `--filter z [False|false|0]` for False.)dataclassesis_dataclassr   Zschema_dict
isinstance	TypeErrorr>   r   r@   floatrA   r3   )rF   rG   Z
new_filtercolr6   r7   Zcolumn_typer   r   r    convert_filters_typem   sf   

rW   datar4   state_dataclassr<   c                 C   sx  t ||}g }| D ]}d}|D ]\}}}	| }
| }||
vr*td| d|
 ||vr1d}nx|dkrt|	trLt|| trL||  |	 k}n]t|	trbt|| trb|| t|	tk}nGt|	trxt|| trx|| t|	tk}n1|| |	k}n*|dkrt|	trt|| tr||  |	 k}n|| |	k}ntd| d|s nq|r|	t
||| q	|S )	a  Return the filtered data given filters.

    Args:
        data: A list of state data.
        filters: A list of KV tuple to filter data (key, val). The data is filtered
            if data[key] != val.
        state_dataclass: The state schema.

    Returns:
        A list of filtered state data in dictionary. Each state data's
        unnecessary columns are filtered by the given state_dataclass schema.
    TzThe given filter column un    is not supported. Enter filters with –-filter key=value or –-filter key!=value Supported filter columns: F=z!=zUnsupported filter predicate z' is given. Available predicates: =, !=.)rW   filterable_columnslowerr@   rS   r)   rA   r   r>   r3   r   )rX   r4   rY   r<   r   ZdatummatchZfilter_columnZfilter_predicateZfilter_valuer[   r   r   r    	do_filter   sb   

r^   )+rQ   r   r   typingr   r   r   r   Zaiohttp.webZaiohttpZray.dashboard.optional_utilsr   Zray.dashboard.utilsr	   Zray.util.state.commonr
   r   r   r   r   r   r   r   r   r   r   Zray.util.state.exceptionr   Zray.util.state.utilr   rA   r)   r!   ZwebRequestr+   r8   r(   rC   rE   rW   dictr^   r   r   r   r    <module>   sZ    4




F