o
    `۷i                  	   @   s   d dl Z d dlZd dl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mZmZmZ d dlmZmZmZ eeZG dd de jZdd Z		dd
edededejjfddZdS )    N)Any)PathLikeRouteDefaiohttphdrs)CustomEncoderHTTPStatusCodeto_google_stylec                	   @   s   e Zd ZdZG dd dZeeejdd Z	eeejdd Z
eejdd	 Zeejd
d Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zededed ed!d"fd#d$Zd"S )%BaseRouteTablea  A base class to bind http route to a target instance. Subclass should implement
    the _register_route method. It should define how the handler interacts with
    _BindInfo.instance.

    Subclasses must declare their own _bind_map and _routes properties to avoid
    conflicts.
    c                   @   s   e Zd Zdd ZdS )zBaseRouteTable._BindInfoc                 C   s   || _ || _|| _d S N)filenamelinenoinstance)selfr   r   r    r   J/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/dashboard/routes.py__init__   s   
z!BaseRouteTable._BindInfo.__init__N)__name__
__module____qualname__r   r   r   r   r   	_BindInfo   s    r   c                 C      d S r   r   clsr   r   r   	_bind_map       zBaseRouteTable._bind_mapc                 C   r   r   r   r   r   r   r   _routes&   r   zBaseRouteTable._routesc                 K   r   r   r   )r   methodpathkwargsr   r   r   _register_route,      zBaseRouteTable._register_routec                 C   r   r   r   )r   r   r   r   r   bind1   r!   zBaseRouteTable.bindc                 C   s   | j S r   )r   r   r   r   r   routes6   s   zBaseRouteTable.routesc                 C   sn   g }| j jD ]&}t|tr'|jj}|jj}| j| | j}|d ur&|	| q|	| qt
j }||_|S r   )r   _items
isinstancer   handler__route_method____route_path__r   r   appendr   webRouteTableDef)r   bound_itemsrroute_method
route_pathr   r#   r   r   r   bound_routes:   s   


zBaseRouteTable.bound_routesc                 K      | j tj|fi |S r   )r    r   	METH_HEADr   r   r   r   r   r   headJ      zBaseRouteTable.headc                 K   r1   r   )r    r   METH_GETr3   r   r   r   getN   r5   zBaseRouteTable.getc                 K   r1   r   )r    r   	METH_POSTr3   r   r   r   postR   r5   zBaseRouteTable.postc                 K   r1   r   )r    r   METH_PUTr3   r   r   r   putV   r5   zBaseRouteTable.putc                 K   r1   r   )r    r   
METH_PATCHr3   r   r   r   patchZ   r5   zBaseRouteTable.patchc                 K   r1   r   )r    r   METH_DELETEr3   r   r   r   delete^   r5   zBaseRouteTable.deletec                 K   r1   r   )r    r   METH_ANYr3   r   r   r   viewb   r5   zBaseRouteTable.viewprefixr   r   returnNc                 K   s   | j j||fi | d S r   )r   static)r   rB   r   r   r   r   r   rD   f   s   zBaseRouteTable.static)r   r   r   __doc__r   classmethodpropertyabcabstractmethodr   r   r    r"   r#   r0   r4   r7   r9   r;   r=   r?   rA   strr   r   rD   r   r   r   r   r
      sJ    








 r
   c                  C   s   G dd dt } | S )zU
    Return a method-based route table class, for in-process HeadModule objects.
    c                   @   s<   e Zd ZdZeeZej	
 Zedd Zedd ZdS )z4method_route_table_factory.<locals>.MethodRouteTablezA helper class to bind http route to class method. Each _BindInfo.instance
        is a class instance, and for an inbound request, we invoke the async handler
        method.c                    s    fdd}|S )Nc                    s   j  v rj    td d j d j jjjjd  t	dt
jjf fdd} j  < |_|_jjfi |S )NzDuplicated route path: z, previous one registered at :rC   c                     sR   z| d } j |I d H W S  ty(   td ttjt d Y S w )NzHandle %s %s failed.)status_codemessage)	r   	Exceptionlogger	exceptionrest_responser   INTERNAL_ERROR	traceback
format_exc)argsreq)	bind_infor&   r   r   r   r   _handler_route   s   
znmethod_route_table_factory.<locals>.MethodRouteTable._register_route.<locals>._wrapper.<locals>._handler_route)r   rO   r   r   r   __code__co_filenameco_firstlineno	functoolswrapsr   r*   Responser'   r(   r   route)r&   rY   r   r   r   r   )rX   r&   r   _wrapperz   s$   zVmethod_route_table_factory.<locals>.MethodRouteTable._register_route.<locals>._wrapperr   )r   r   r   r   rb   r   ra   r   r    x   s   "zDmethod_route_table_factory.<locals>.MethodRouteTable._register_routec                 S   s>   dd }t ||}|D ]\}}|| j|jj |jj _qd S )Nc                 S   s"   t | rt| dot| dS dS )Nr'   r(   F)inspectismethodhasattr)or   r   r   	predicate   s
   
zLmethod_route_table_factory.<locals>.MethodRouteTable.bind.<locals>.predicate)rc   
getmembersr   __func__r'   r(   r   )r   r   rg   handler_routes_hr   r   r   r"      s   z9method_route_table_factory.<locals>.MethodRouteTable.bindN)r   r   r   rE   collectionsdefaultdictdictr   r   r*   r+   r   rF   r    r"   r   r   r   r   MethodRouteTablep   s    


%rp   )r
   )rp   r   r   r   method_route_table_factoryk   s   =rq   TrM   rN   convert_google_stylerC   c                 K   s\   t jddkrddi}ni }| tjk}tjj|||rt|n|dt	j
tjtd|| dS )a.  
    Args:
        status_code: HTTPStatusCode
            The HTTP status code of the response.
        message: str
            The message of the response.
        convert_google_style: bool
            Whether to convert the response to google style.

    Returns:
        aiohttp.web.Response
    RAY_DASHBOARD_DEV1zAccess-Control-Allow-Origin*)resultmsgdatar   )dumpsheadersstatus)osenvironr7   r   OKr   r*   json_responser	   r]   partialjsonry   r   )rM   rN   rr   r   rz   successr   r   r   rR      s   

rR   )T)rH   rm   r]   rc   r   loggingr|   rT   typingr   ray.dashboard.optional_depsr   r   r   r   ray.dashboard.utilsr   r   r	   	getLoggerr   rP   ABCr
   rq   rJ   boolr*   r_   rR   r   r   r   r   <module>   s0    
ZH