o
    ci                     @   s.  d dl Z d dlZd dlmZmZ d dlmZ d dlmZm	Z	m
Z
mZmZ d dlZd dlmZmZmZ d dlmZmZ d dlmZ d dlmZ d d	lmZ e eZG d
d deZG dd deZG dd deZeddG dd dZ e	eee f  Z!eddG dd dZ"eddG dd dZ#dS )    N)ABCabstractmethod)	dataclass)AnyAsyncIteratorListTupleUnion)ReceiveScopeSend)StreamingHTTPRequestgRPCRequest)SERVE_LOGGER_NAME)DEFAULT)RayServegRPCContextc                   @   s~   e Zd ZdZeedefddZeedefddZeedefddZ	eede
fd	d
Zeede
fddZdS )ProxyRequestzDBase ProxyRequest class to use in the common interface among proxiesreturnc                 C      t NNotImplementedErrorself r   ]/home/ubuntu/.local/lib/python3.10/site-packages/ray/serve/_private/proxy_request_response.pyrequest_type      zProxyRequest.request_typec                 C   r   r   r   r   r   r   r   method   r   zProxyRequest.methodc                 C   r   r   r   r   r   r   r   
route_path   r   zProxyRequest.route_pathc                 C   r   r   r   r   r   r   r   is_route_request$   r   zProxyRequest.is_route_requestc                 C   r   r   r   r   r   r   r   is_health_request)   r   zProxyRequest.is_health_requestN)__name__
__module____qualname____doc__propertyr   strr   r   r   boolr    r!   r   r   r   r   r      s"    r   c                   @   s  e Zd ZdZdededefddZede	fdd	Z
ede	fd
dZede	fddZedefddZedefddZede	fddZede	fddZede	fddZedeeeef  fddZde	fddZde	fddZd e	defd!d"Zd#S )$ASGIProxyRequestzBProxyRequest implementation to wrap ASGI scope, receive, and send.scopereceivesendc                 C   s   || _ || _|| _d S r   )r*   r+   r,   )r   r*   r+   r,   r   r   r   __init__2   s   
zASGIProxyRequest.__init__r   c                 C      | j ddS )Ntype r*   getr   r   r   r   r   7      zASGIProxyRequest.request_typec                 C   s   | j dd S )Nr   WS)r*   r2   upperr   r   r   r   r   ;      zASGIProxyRequest.methodc                 C   s   | j ddt| jd  S Npathr0   )r*   r2   len	root_pathr   r   r   r   r   @   s   zASGIProxyRequest.route_pathc                 C   
   | j dkS )Nz	/-/routesr   r   r   r   r   r    D      
z!ASGIProxyRequest.is_route_requestc                 C   r;   )Nz
/-/healthzr<   r   r   r   r   r!   H   r=   z"ASGIProxyRequest.is_health_requestc                 C   r.   )Nclientr0   r1   r   r   r   r   r>   L   r3   zASGIProxyRequest.clientc                 C   r.   )Nr:   r0   r1   r   r   r   r   r:   P   r3   zASGIProxyRequest.root_pathc                 C   r.   r7   r1   r   r   r   r   r8   T   r3   zASGIProxyRequest.pathc                 C   s   | j dg S )Nheadersr1   r   r   r   r   r?   X   r3   zASGIProxyRequest.headersr8   c                 C      || j d< d S )Nr8   r*   )r   r8   r   r   r   set_path\      zASGIProxyRequest.set_pathr:   c                 C   r@   )Nr:   rA   )r   r:   r   r   r   set_root_path_   rC   zASGIProxyRequest.set_root_pathproxy_actor_namec                 C   s   t t| j|dS )N)
asgi_scoperE   )pickledumpsr   r*   )r   rE   r   r   r   serialized_replica_argb   s   z'ASGIProxyRequest.serialized_replica_argN)r"   r#   r$   r%   r   r
   r   r-   r&   r'   r   r   r   r(   r    r!   r>   r:   r8   r   r   bytesr?   rB   rD   rI   r   r   r   r   r)   /   s0    r)   c                   @   s   e Zd ZdZdedejjjde	de
fddZdd	 Zed
e	fddZed
e	fddZed
e	fddZed
e
fddZed
e
fddZde	fddZd
efddZdS )gRPCProxyRequestzGProxyRequest implementation to wrap gRPC request protobuf and metadata.request_protocontextservice_methodstreamc                 C   sH   || _ || _|| _|| _d| _d | _d| _tj| _	t
|| _|   d S )Nr0   __call__)_request_protorM   rN   rO   app_name
request_idmethod_namer   VALUEmultiplexed_model_idr   ray_serve_grpc_contextsetup_variables)r   rL   rM   rN   rO   r   r   r   r-   p   s   
zgRPCProxyRequest.__init__c                 C   sp   | j s2| js4| jd}|d | _| j D ]\}}|dkr"|| _q|dkr*|| _q|dkr1|| _	qd S d S d S )N/applicationrS   rV   )
r    r!   rN   splitrT   rM   invocation_metadatarR   rS   rV   )r   service_method_splitkeyvaluer   r   r   rX      s   
z gRPCProxyRequest.setup_variablesr   c                 C   s   dS )Ngrpcr   r   r   r   r   r      s   zgRPCProxyRequest.request_typec                 C      | j S r   rN   r   r   r   r   r         zgRPCProxyRequest.methodc                 C   rb   r   )rR   r   r   r   r   r      rd   zgRPCProxyRequest.route_pathc                 C   r;   )Nz./ray.serve.RayServeAPIService/ListApplicationsrc   r   r   r   r   r       r=   z!gRPCProxyRequest.is_route_requestc                 C   r;   )Nz%/ray.serve.RayServeAPIService/Healthzrc   r   r   r   r   r!      r=   z"gRPCProxyRequest.is_health_requestrS   c                 C   s   | j d|fg d S )NrS   )rW   set_trailing_metadata)r   rS   r   r   r   send_request_id   s   z gRPCProxyRequest.send_request_idc                 C   s   t t| jdS )N)user_request_proto)rG   rH   r   rQ   r   r   r   r   rI      r6   z'gRPCProxyRequest.serialized_replica_argN)r"   r#   r$   r%   r   ra   _cythoncygrpc_ServicerContextr'   r(   r-   rX   r&   r   r   r   r    r!   rf   rJ   rI   r   r   r   r   rK   m   s0    
rK   T)frozenc                   @   s8   e Zd ZU eeejf ed< dZe	ed< dZ
eed< dS )ResponseStatuscodeFis_errorr0   messageN)r"   r#   r$   r	   r'   ra   
StatusCode__annotations__rn   r(   ro   r   r   r   r   rl      s   
 rl   c                   @   s2   e Zd ZU dZeed< dZeed< dZeed< dS )HandlerMetadatar0   application_namedeployment_namerouteN)r"   r#   r$   rs   r'   rq   rt   ru   r   r   r   r   rr      s   
 rr   c                   @   s.   e Zd ZU eed< eed< eed< eed< dS )ResponseHandlerInforesponse_generatormetadatashould_record_access_log!should_increment_ongoing_requestsN)r"   r#   r$   ResponseGeneratorrq   rr   r(   r   r   r   r   rv      s
   
 rv   )$loggingrG   abcr   r   dataclassesr   typingr   r   r   r   r	   ra   starlette.typesr
   r   r   ray.serve._private.commonr   r   ray.serve._private.constantsr   ray.serve._private.utilsr   ray.serve.grpc_utilr   	getLoggerloggerr   r)   rK   rl   r{   rr   rv   r   r   r   r   <module>   s,    
>C