
    S`                         d dl Z d dlZd dlmZ d dlmZ d dlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZ  e j$                  e      Z G d d      Z G d d      Z G d de      Zd Zy)    N)chain)NotFound)
version_lt   )__version__)ConfigurationError)
VolumeSpec)LABEL_PROJECT)LABEL_VERSION)LABEL_VOLUMEc                   x    e Zd Z	 	 ddZd Zd ZddZd Zed        Z	ed        Z
ed	        Zed
        Zd Zy)VolumeNc	                     || _         || _        || _        || _        || _        || _        || _        || _        d | _        y N)	clientprojectnamedriverdriver_optsexternallabelscustom_namelegacy)	selfr   r   r   r   r   r   r   r   s	            0/usr/lib/python3/dist-packages/compose/volume.py__init__zVolume.__init__   sC    	& &    c                     | j                   j                  | j                  | j                  | j                  | j
                        S )N)r   )r   create_volume	full_namer   r   _labelsr   s    r   createzVolume.create    s9    {{((NNDKK)9)9$,, ) 
 	
r   c                     | j                   r!t        j                  d| j                         y t        j                  d| j                         | j                  j                  | j                        S )NzVolume %s is external, skippingzRemoving volume %s)r   loginfo	true_namer   remove_volumer"   s    r   removezVolume.remove%   sK    ==HH6G%t~~6{{((88r   c                     |r%| j                   j                  | j                        S | j                   j                  | j                        S r   )r   inspect_volumelegacy_full_namer    )r   r   s     r   inspectzVolume.inspect,   s9    ;;--d.C.CDD{{))$..99r   c                 |    | j                          	 | j                  | j                         y# t        $ r Y yw xY w)Nr   FT)_set_legacy_flagr-   r   r   r"   s    r   existszVolume.exists1   s>    	LLL,   		s   / 	;;c                     | j                   r| j                  S dj                  | j                  j	                  d      | j                        S )N{}_{}z-_)r   r   formatr   lstripr"   s    r   r    zVolume.full_name9   s9    99~~dll11$7CCr   c                     | j                   r| j                  S dj                  t        j                  dd| j
                        | j                        S )Nr3   z[_-] )r   r   r4   resubr   r"   s    r   r,   zVolume.legacy_full_name?   s@    99~~FF7B-tyy
 	
r   c                 j    | j                          | j                  r| j                  S | j                  S r   )r0   r   r,   r    r"   s    r   r'   zVolume.true_nameG   s+    ;;(((~~r   c                    t        | j                  j                  d      ry | j                  r| j                  j	                         ni }|j                  t        | j                  t        | j                  t        t        i       |S )Nz1.23)r   r   _versionr   copyupdater
   r   r   r   r   r   )r   r   s     r   r!   zVolume._labelsN   sb    dkk**F3'+{{!!#4<<$));
 	
 r   c                     | j                   y 	 | j                  d      }|d u| _         y # t        $ r
 d| _         Y y w xY w)NTr/   F)r   r-   r   )r   datas     r   r0   zVolume._set_legacy_flagZ   sF    ;;"	 <<t<,Dd*DK 	 DK	 s   + >>)NNFNFr   )__name__
__module____qualname__r   r#   r)   r-   r1   propertyr    r,   r'   r!   r0    r   r   r   r      sx    GK:?


9:
 D D
 
 
   	 	 r   r   c                   4    e Zd Zd Zed        Zd Zd Zd Zy)ProjectVolumesc                     || _         y r   )volumes)r   rI   s     r   r   zProjectVolumes.__init__f   s	    r   c                 t   |j                   xs i }|j                         D ci c]  \  }}|t        |||j                  d|      |j                  d      |j                  d      |j                  d      d u|j                  d      t	        |j                  dd                   }}} | |      S c c}}w )Nr   r   r   r   r   F)r   r   r   r   r   r   r   r   )rI   itemsr   getbool)clsr   config_datar   config_volumesvol_namer@   rI   s           r   from_configzProjectVolumes.from_configi   s    $,,2 #1"6"6"8
 $ fXXfh/xx) HH]3 HHV,D8xx)dhhz59:	 	
 
 7|
s   BB4c                     | j                   j                         D ]  }	 |j                           y # t        $ r# t        j                  d|j                         Y Bw xY w)NzVolume %s not found.)rI   valuesr)   r   r%   warningr'   )r   volumes     r   r)   zProjectVolumes.remove{   sW    ll))+ 	FFF	F  F2F4D4DEFs   2)AAc                    	 | j                   j                         D ]  }|j                         }|j                  rWt        j                  dj                  |j                               |s&t        dj                  |j                  d            v|sNt        j                  dj                  |j                  |j                  xs d             |j                          t        |j                  |j                        |        y # t         $ r0 t        dj                  j                  |j                              w xY w)	Nz>Volume {} declared as external. No new volume will be created.zVolume {name} declared as external, but could not be found. Please create the volume manually using `{command}{name}` and try again.zdocker volume create --name=)r   commandz#Creating volume "{}" with {} driverdefaultr/   z)Volume {} specifies nonexistent driver {})rI   rT   r1   r   r%   debugr4   r   r   r    r&   r   r#   check_remote_volume_configr-   r   r   )r   rV   volume_existss      r   
initializezProjectVolumes.initialize   s    	,,--/ ] &??II228&2E )0FFLf%+%5%5(F GM G  $HH=DD",,fmm.Hy
 MMO.v~~V]]~/SU[\5]6  	$;BB6;;PVP]P]^ 	s   DD 9Ec                     |j                   s|S t        |t              r5| j                  |j                     }|j                  |j                        S | j                  |j                     j                  |_        |S )N)r   )is_named_volume
isinstancer	   rI   r   _replacer'   source)r   volume_specrV   s      r   namespace_speczProjectVolumes.namespace_spec   sl    **k:.\\+"6"67F''1A1A'BB!%k.@.@!A!K!KKr   N)	rA   rB   rC   r   classmethodrR   r)   r]   rd   rE   r   r   rG   rG   d   s,      "F D	r   rG   c                        e Zd Z fdZ xZS )VolumeConfigChangedErrorc           	      t    t         |   dj                  |j                  ||||j                               y )Na  Configuration for volume {vol_name} specifies {property_name} {local_value}, but a volume with the same name uses a different {property_name} ({remote_value}). If you wish to use the new configuration, please remove the existing volume "{full_name}" first:
$ docker volume rm {full_name})rQ   property_namelocal_valueremote_valuer    )superr   r4   r   r'   )r   localri   rj   rk   	__class__s        r   r   z!VolumeConfigChangedError.__init__   s;    5 6<V='l// 6< 6
	
r   )rA   rB   rC   r   __classcell__)rn   s   @r   rg   rg      s    
 
r   rg   c           	      L   |j                   rE| j                  d      |j                   k7  r't        |d|j                   | j                  d            |j                  xs i }| j                  d      xs i }t	        t        ||            D ]r  }|j                  d      r|j                  |      |j                  |      k7  s9t        |dj                  |      |j                  |      |j                  |             |j                  xs i }| j                  d      xs i }t	        t        ||            D ]g  }|j                  d      r|j                  |      |j                  |      k7  s9t        j                  dj                  |j                  |             i y )NDriverr   Optionszcom.docker.z"{}" driver_optLabelsz?Volume {}: label "{}" has changed. It may need to be recreated.)r   rL   rg   r   setr   
startswithr4   r   r%   rU   r   )remoterm   
local_optsremote_optsklocal_labelsremote_labelss          r   r[   r[      sd   ||

8,<&uhfjjQYFZ[[""(bJ**Y'-2K{J/0 <<&??1!22*(//2JNN14E{WXGY 	 <<%2LJJx(.BM}l34 <<&Q<#3#3A#66KK$fUZZ3	r   )loggingr8   	itertoolsr   docker.errorsr   docker.utilsr   r7   r   configr   config.typesr	   constr
   r   r   	getLoggerrA   r%   r   rG   rg   r[   rE   r   r   <module>r      sf     	  " #  & $      g!N  N bI IX
1 
r   