o
    $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status_codeerror_messageresultc                 K   s   t d| ||dd|S )NF)r   messager   convert_google_style r   )r   r   r   kwargsr   r   Z/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/dashboard/state_api_utils.pydo_reply   s   r    list_api_fnreqc              
      s   z| t |dI d H }ttjdt|dW S  ty2 } zttjt|d dW  Y d }~S d }~w tyM } zttj	t|d dW  Y d }~S d }~ww N)option )r   r   r   )
options_from_reqr    r
   OKr   
ValueErrorBAD_REQUESTstrr   INTERNAL_ERROR)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)querygetalllenzipappend)r"   r/   r0   r1   filterskey	predicatevalr   r   r   _get_filters_from_req?   s   r;   c                 C   s   t | jddur| jdnt}|tkr$td| 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 Given limit z exceeds the supported limit zg. Use a lower limit, or set the `RAY_MAX_LIMIT_FROM_API_SERVER` environment variable to a larger value.timeout   detailFexclude_driverT)r<   r=   r7   r?   r@   )
intr2   getr   r   r(   r;   r   boolr   )r"   r<   r=   r7   r?   r@   r   r   r   r&   L   s,   r&   c                 C   s6   t | jdt}t| }| jdd }t|||dS )Nr=   
summary_by)r=   r7   rD   )rA   r2   rB   r   r;   r   )r"   r=   r7   rD   r   r   r   summary_options_from_reqh   s   rE   
summary_fnc                    s*   | t |dI d H }ttjdt|dS r#   )rE   r    r
   r'   r   )rF   r"   r   r   r   r   handle_summary_apio   s   rG   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   schema_dict
isinstance	TypeErrorrA   r   r(   floatrC   r6   )rH   rI   
new_filtercolr9   r:   column_typer   r   r   convert_filters_type{   sf   

r\   datar7   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: =, !=.)r\   filterable_columnslowerr(   rV   r*   rC   r   rA   r6   r   )r]   r7   r^   r?   r   datummatchfilter_columnfilter_predicatefilter_valuer`   r   r   r   	do_filter   sb   

rg   )+rS   r   r   typingr   r   r   r   aiohttp.webaiohttpray.dashboard.optional_utilsr	   ray.dashboard.utilsr
   ray.util.state.commonr   r   r   r   r   r   r   r   r   r   r   ray.util.state.exceptionr   ray.util.state.utilr   r*   r    webRequestr-   r;   r&   rE   rG   r\   dictrC   rg   r   r   r   r   <module>   sf    4




F