
    S`^                     (   d dl Z 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 ddlmZ ddlmZ ddlmZ  e j(                  e      Zh dZddZd Zd ZddZd Zd Z	 	 	 ddZd Zd Z d Z!ddZ"y)    N   )errors   )config)parallel)Environment)LABEL_CONFIG_FILES)LABEL_ENVIRONMENT_FILE)LABEL_WORKING_DIR)Project)
get_client)load_context)make_context)	UserError>   psrmtopexeckilllogsstoppausestarteventsrestartunpausec                 p   |xs i }t        |      }|j                  d      }t        j                  |xs | |      }|j                  dd       t        v |_        t        |       d }|j                  dd       }|r't        |      }|st        dj                  |            |j                  dd       }|+|rt        d      |j                  d      }t        |||      }t        | t        ||      |j                  d      |j                  d	      ||||j                  d
       |t        ||      
      S )N
--env-fileCOMMANDz	--contextzContext '{}' not foundz--hostzL-H, --host and -c, --context are mutually exclusive. Only one should be set.=z--project-namez	--verbose--no-interpolate)project_nameverbosecontextenvironmentoverride_dirinterpolateenvironment_fileenabled_profiles)get_project_dirgetr   from_env_fileSILENT_COMMANDSsilentset_parallel_limitr   r   formatlstripr   get_projectget_config_path_from_optionsget_profiles_from_options)	project_diroptionsadditional_optionsr&   r(   r%   r$   context_namehosts	            5/usr/lib/python3/dist-packages/compose/cli/command.pyproject_from_optionsr;   $   s>   +1r"7+L{{<0++L,GKIYZK Y5HK{# G;;{D1L|,4;;LIJJ;;x&D^` `{{3tWk:$Wk:[[!12K(!+//0BCC)27KH     c                 6   | j                  d      }|rF	 t        |      }|dk  rt        j                  d      t        j                  j                  |       y y # t        $ r4 t        j                  dj                  | j                  d                  w xY w)NCOMPOSE_PARALLEL_LIMITz7COMPOSE_PARALLEL_LIMIT must be an integer (found: "{}")r   z-COMPOSE_PARALLEL_LIMIT can not be less than 2)	r+   int
ValueErrorr   r   r0   r   GlobalLimitset_global_limit)r%   parallel_limits     r:   r/   r/   J   s     __%=>N	 0N Q""#RSS--n=   	""IPPOO$<= 	s   A =Bc                     d }t        | t        j                        }|r+|d   dk(  ryt        j                  j	                  |d         }| j                  d      xs |S )Nr   -.z--project-directory)r3   osenvironpathdirnamer+   )r6   r&   filess      r:   r*   r*   Z   sS    L("**=E8s?wwuQx0;;,-==r<   c                 
   |xs i }t        |      }|j                  d      }t        j                  |xs | |      }t	        ||      }t        j                  t        j                  | |||      |j                  d             S )Nr   r!   )r*   r+   r   r,   r3   r   loadfind)base_dirr6   r7   r&   r(   r%   config_paths          r:   get_config_from_optionsrQ   d   s    +1r"7+L{{<0++L,DHFVWK.wDK;;Hk;E""#566 r<   c                     d }| j                  d      }|r ||      S |j                  d      }|r7|j                  dt        j                        } ||j                  |            S y )Nc                 n    | D cg c]%  }t        |t              r|j                  d      n|' c}S c c}w )Nzutf-8)
isinstancebytesdecode)pathsps     r:   unicode_pathsz3get_config_path_from_options.<locals>.unicode_pathsq   s-    JOPQZ5%9!q@PPPs   *2z--fileCOMPOSE_FILECOMPOSE_PATH_SEPARATOR)r+   rG   pathsepsplit)r6   r%   rY   file_optionconfig_filesr\   s         r:   r3   r3   p   se    Q ++h'K[))??>2L//":BJJG\//899r<   c                 x    | j                  d      }|r|S |j                  d      }|r|j                  d      S g S )Nz	--profileCOMPOSE_PROFILES,)r+   r]   )r6   r%   profile_optionprofiless       r:   r4   r4      s?    [[-N12H~~c""Ir<   c
                    |st        j                  |       }t        j                  | |||      }
t	        |
j
                  ||      }t        j                  |
|      }|j                  d      }t        ||||      }t        j                  |      5  t        j                  ||||j                  d      t        |
|      |	      cd d d        S # 1 sw Y   y xY w)NCOMPOSE_API_VERSION)r#   versionr$   r%   DOCKER_DEFAULT_PLATFORM)r   r,   r   rN   get_project_nameworking_dirrM   r+   r   r   handle_connection_errorsr   from_configexecution_context_labels)r5   rP   r"   r#   r$   r%   r&   r'   r(   r)   config_detailsconfig_dataapi_versionclients                 r:   r2   r2      s     !//<[[k;UN#""L+L ++nk:K//"78Kg;F 
	(	(	0 
""OO56$^5EF

 
 
s   3CCc                 |   dj                  t        t        j                  j	                  | j
                              g}t        |       s.|j                  dj                  t        t        |                    |B|j                  dj                  t        t        j                  j                  |                   |S )Nz{}={})r0   r   rG   rI   abspathrj   use_config_from_stdinappendr	   config_files_labelr
   normpath)rn   r(   extra_labelss      r:   rm   rm      s    ("''//.:T:T*UVL !0GNN+=?QR`?abc#GNN"GG-.0 	 r<   c                 B    | j                   D ]  }|j                  r y y)NTF)r_   filename)rn   cs     r:   rt   rt      s&    (( zz r<   c                 F    dj                  d | j                  D              S )Nrb   c              3   n   K   | ]-  }t         j                  j                  |j                         / y wN)rG   rI   rw   rz   ).0r{   s     r:   	<genexpr>z%config_files_label.<locals>.<genexpr>   s(      
)*$
s   35)joinr_   )rn   s    r:   rv   rv      s&    88 
.<.I.I
 
 
r<   c                    d }|st        j                  |       }|xs |j                  d      }|r ||      S t        j                  j                  t        j                  j                  |             }|r ||      S y)Nc                 L    t        j                  dd| j                               S )Nz[^-_a-z0-9] )resublower)names    r:   normalize_namez(get_project_name.<locals>.normalize_name   s    vvnb$**,77r<   COMPOSE_PROJECT_NAMEdefault)r   r,   r+   rG   rI   basenamers   )rj   r"   r%   r   projects        r:   ri   ri      sp    8 !//<J;??3I#JLl++ggrww{;<Gg&&r<   r~   )	NNFNNNTNN)NN)#loggingrG   r   r   r   r   r   config.environmentr   constr	   r
   r   r   r   docker_clientr   r   r   r   	getLogger__name__logr-   r;   r/   r*   rQ   r3   r4   r2   rm   rt   rv   ri    r<   r:   <module>r      s     	 	    , & * %  % ' ' g! #L> >		 KP=AJN
8 
r<   