
    &`i                         d dl mZ d dlmZmZ d dlmZ 	 d dlmZ n# e	$ r	 d dl
mZ Y nw xY wdeeef         ddfdZd	eeef         ddfd
Z	 ddZd Zd Zd Zd Zd ZdS )    )Path)AnyDict)
cli_logger)quotefile_mountsreturnNc                     |                                  D ]A\  }}t          |                                          rt          j        d| d| d           BdS )a  Checks if files are passed as file_mounts. This is a problem for Docker
    based clusters because when a file is bind-mounted in Docker, updates to
    the file on the host do not always propagate to the container. Using
    directories is recommended.
    zFile Mount: (:zS) refers to a file.
 To ensure this mount updates properly, please use a directory.N)itemsr   is_filer   warning)r   remotelocals      r/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/autoscaler/_private/docker.py_check_docker_file_mountsr      s     %**,,  ;;   	H H H H H H       configc                 h   d| vrdS t          |                     di                      | d                             d          }| d                             d          }| d                             d|          }| d                             d|          }|p|o|}|s|sdS |r|s
J d            dS )	z1Checks whether the Docker configuration is valid.dockerNr   imagecontainer_name
head_imageworker_imagez%Must provide a container & image name)r   get)r   docker_imagecnamehead_docker_imageworker_docker_imageimage_presents         r   validate_docker_configr!      s    vfjj;;<<<(#''00L8  !122Ex(,,\<HH *..~|LL O%6%N;NM PM POOO(OOO&4r   Fc                     s
J d            d|rd                     d |D                       fd| D             S )NzMust provide docker command  c                 :    g | ]}d                      |          S )z-e {env}=${env})envformat).0r&   s     r   
<listcomp>z$with_docker_exec.<locals>.<listcomp>7   s*    RRR#-444==RRRr   c                 f    g | ]-}d                      rdndt          |                    .S )zE{docker_cmd} exec {interactive} {env} {container} /bin/bash -c {cmd} -itr#   )
docker_cmdinteractiver&   	containercmd)r(   r   )r)   r0   r   r-   env_strwith_interactives     r   r*   z$with_docker_exec.<locals>.<listcomp>8   s`     	 	 	  	PVV!!19r$c

 	W 	
 	
	 	 	r   join)cmdsr   r-   env_varsr2   r1   s    `` `@r   with_docker_execr7   1   s     44444:G T((RRRRRSS	 	 	 	 	 	 	 	 	 	 	r   c           	      F    d                     |ddd|z   dz   | ddg          S )Nr$   inspectz-fz'{{z}}'z||truer3   )r   templater-   s      r   _check_helperr<   D   s4    88	Yeh&6&>tVT  r   c                 $    t          | d|          S )Nz.State.Runningr<   r   r-   s     r   check_docker_running_cmdr@   J   s     0*===r   c                 $    t          | d|          S )Nzjson .Mountsr>   r?   s     r   check_bind_mounts_cmdrB   N   s    
;;;r   c                 $    t          | d|          S )Nz.Config.Imager>   r?   s     r   check_docker_imagerD   R   s    <<<r   c                    ddl m}  ||          fd|D             }	d                    fd|	                                D                       }
ddd}d                    d |                                D                       }d                    |          }|d	d
d                    |          dd|
||d|dg}d                    |          S )Nr   )get_docker_host_mount_locationc                      i | ]
} d | |S )/ )r)   dstdocker_mount_prefixs     r   
<dictcomp>z%docker_start_cmds.<locals>.<dictcomp>d   s*    GGGS#++c++SGGGr   r$   c           
      r    g | ]3\  }}d                      ||                    ddz                       4S )z-v {src}:{dest}z~/rH   )srcdest)r(   replace)r)   kvhome_directorys      r   r*   z%docker_start_cmds.<locals>.<listcomp>g   sT     	
 	
 	
1 $$4RUAU1V1V$WW	
 	
 	
r   zC.UTF-8)LC_ALLLANGc                 B    g | ]\  }}d                      ||          S )z-e {name}={val})namevalr'   )r)   rQ   rR   s      r   r*   z%docker_start_cmds.<locals>.<listcomp>p   s0    NNNTQ		!	!qa	!	0	0NNNr   runz--rmz	--name {}z-dr,   z
--net=hostbash)ray.autoscaler.sdkrF   r4   r   r(   )userr   
mount_dictr   user_optionscluster_namerS   r-   rF   mountmount_flagsr6   	env_flagsuser_options_str
docker_runrK   s         `        @r   docker_start_cmdsre   V   s"    BAAAAA88FFGGGGJGGGE((	
 	
 	
 	
	
 	
 	
 K $Y77HNNX^^=M=MNNN I xx-->**J 88Jr   )NF)pathlibr   typingr   r   "ray.autoscaler._private.cli_loggerr   shlexr   ImportErrorpipesstrr   r!   r7   r<   r@   rB   rD   re   rI   r   r   <module>rm      sR                 9 9 9 9 9 9   4S> d    4S> d    0 GL   &  > > >< < <= = =,  ,  ,  ,  , s    ++