o
    $iC$                     @   s   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
 d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ ed
ZG dd dZdd ZdS )    N)deepcopy)AnyDictListOptional)crc32)	BaseModel)DeploymentConfig)DeploymentOptionUpdateTypeget_random_string)AutoscalingConfig)DeploymentVersionz	ray.servec                   @   s   e Zd Z				d#dee dedee deeeeef   dee dee	 dee fd	d
Z
e	d$dee fddZde	fddZdedefddZdd Zdd Zdd Zdd ZdefddZedefddZd ee defd!d"ZdS )%r   Ncode_versiondeployment_configray_actor_optionsplacement_group_bundlesplacement_group_strategymax_replicas_per_noderoute_prefixc                 C   sn   |d urt |tstdt| d|d u rt | _n|| _|| _|| _|| _|| _	|| _
|| _|   d S )Nzcode_version must be str, got .)
isinstancestr	TypeErrortyper   r   r   r   r   r   r   r   compute_hashes)selfr   r   r   r   r   r   r    r   W/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/serve/_private/version.py__init__   s   

zDeploymentVersion.__init__c                 C   s    t |}||_||_|  |S N)r   r   r   r   )clsdeployment_versionr   r   version_copyr   r   r   from_deployment_version,   s
   z)DeploymentVersion.from_deployment_versionreturnc                 C   s   | j S r   )_hashr   r   r   r   __hash__6   s   zDeploymentVersion.__hash__otherc                 C   s   t |tsdS | j|jkS )NF)r   r   r%   )r   r(   r   r   r   __eq__9   s   
zDeploymentVersion.__eq__c                 C   s0   | j |j kp| j|jkp| j|jkp| j|jkS )zkDetermines whether the new version requires actors of the current version to
        be restarted.
        )r   ray_actor_options_hashplacement_group_options_hashr   r   new_versionr   r   r   requires_actor_restart>   s   

z(DeploymentVersion.requires_actor_restartc                 C   s   | j |j kS )zhDetermines whether the new version requires calling reconfigure() on the
        replica actor.
        )reconfigure_actor_hashr,   r   r   r   requires_actor_reconfigureJ   s   z,DeploymentVersion.requires_actor_reconfigurec                 C   s   | j j|j jkS )zDetermines whether lightweightly updating an existing replica to the new
        version requires broadcasting through long poll that the running replicas has
        changed.
        )r   max_ongoing_requestsr,   r   r   r   requires_long_poll_broadcastP   s   z.DeploymentVersion.requires_long_poll_broadcastc                 C   s   t | jpi }t|| _i }| jd ur| j|d< | jd ur"| j|d< t |}t|| _t | j}t|| t	j
g | _t| jd| | t| jd | | t	jt	j
g | _d S )Nbundlesstrategyzutf-8)
_serializer   r   r*   r   r   r+   r   _get_serialized_optionsr
   NeedsActorReconfigurer/   r   encoder   r   NeedsReconfigurer%   )r   serialized_ray_actor_options combined_placement_group_options"serialized_placement_group_optionsserialized_route_prefixr   r   r   r   Z   sH   






	

z DeploymentVersion.compute_hashesc                 C   s^   t | j| j t| j| jd urt| jnd| jd ur | jnd| j	d ur+| j	dS ddS )N r   )r   r   r   r   r   r   )
DeploymentVersionProtor   r   to_protojsondumpsr   r   r   r   r&   r   r   r   r@      s   



zDeploymentVersion.to_protoprotoc                 C   sT   t |jt|jt|j|jrt|jnd |j	r|j	nd |j
r&|j
dS d dS )N)r   placement_group_versionr   )r   r   r	   
from_protor   rA   loadsr   r   rD   r   )r    rC   r   r   r   rE      s   


zDeploymentVersion.from_protoupdate_typesc                 C   s   i }t | jdr| jjn| jj}| D ]:\}}|jjd}||v rNt| j|||< t	|| t
r?|| jddhd||< qt	|| trN||  ||< qd|v r[|d dd t	| jjtrqd	|v rq|d	= | jjt| S t|S )
zReturns a serialized dictionary containing fields of a deployment config that
        should prompt a deployment version update.
        model_fieldsupdate_typemetrics_interval_slook_back_period_s)includerequest_router_config_serialized_request_router_clsNuser_config)hasattrr   rH   
__fields__items
field_infoextragetgetattrr   r   dictr   poprO   bytesr5   )r   rG   reconfigure_dictfieldsoption_namefieldoption_weightr   r   r   r6      s8   

z)DeploymentVersion._get_serialized_options)NNNNr   )__name__
__module____qualname__r   r   r	   r   r   floatintr   classmethodr#   r'   r   boolr)   r.   r0   r2   r   rY   r@   r?   rE   r
   r6   r   r   r   r   r      sN    
	
*r   c                 C   s   t tj| ddS )NT)	sort_keys)r   r8   rA   rB   )json_objectr   r   r   r5      s   r5   )rA   loggingcopyr   typingr   r   r   r   zlibr   ray._common.pydantic_compatr   ray.serve._private.configr	   ray.serve._private.utilsr
   r   ray.serve.configr   ray.serve.generated.serve_pb2r   r?   	getLoggerloggerr5   r   r   r   r   <module>   s    
 I