U
    ]U'                     @   s@  d dl mZ d dl mZ d dlZd dlZd dlm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 eeZG d
d deZdd Zdd Zdd Zdd ZG dd deZG dd deZG dd deZdZdZdd Zdd Z d d! Z!d"d# Z"d$d% Z#d&d' Z$d(d) Z%d*d+ Z&d,d- Z'G d.d/ d/eZ(e( Z)dS )0    )absolute_import)unicode_literalsN)Template   )ConfigurationError)COMPOSEFILE_V2_0)parse_bytes)parse_nanoseconds_intc                   @   s   e Zd Zdd Zdd ZdS )Interpolatorc                 C   s   || _ || _d S N)	templatermapping)selfr   r    r   >/usr/lib/python3/dist-packages/compose/config/interpolation.py__init__   s    zInterpolator.__init__c                 C   s6   z|  || jW S  tk
r0   t|Y nX d S r   )r   
substituter   
ValueErrorInvalidInterpolationr   stringr   r   r   interpolate   s    zInterpolator.interpolateN)__name__
__module____qualname__r   r   r   r   r   r   r
      s   r
   c                    sF   | t krtt| n
tt|  fddtfdd| D S )Nc                    s"   t  fdd|pi  D S )Nc                 3   s&   | ]\}}|t || fV  qd S r   )interpolate_value.0keyval)interpolatornamesectionr   r   	<genexpr>'   s   zJinterpolate_environment_variables.<locals>.process_item.<locals>.<genexpr>)dictitems)r!   config_dict)r    r"   )r!   r   process_item&   s    
z7interpolate_environment_variables.<locals>.process_itemc                 3   s$   | ]\}}| ||pi fV  qd S r   r   )r   r!   r&   )r'   r   r   r#   ,   s   z4interpolate_environment_variables.<locals>.<genexpr>)V2_0r
   r   TemplateWithDefaultsr$   r%   )versionconfigr"   Zenvironmentr   )r    r'   r"   r   !interpolate_environment_variables    s    
r,   c                 C   s   d ||| S )Nz{}/{}/{}format)
config_keyr"   r!   r   r   r   get_config_path2   s    r0   c                 C   s   zt ||t||| W S  tk
rP } ztdj|| ||jdW 5 d }~X Y n< tk
r } ztdj||| ||jdW 5 d }~X Y nX d S )NzXInvalid interpolation format for "{config_key}" option in {section} "{name}": "{string}")r/   r!   r"   r   zdMissing mandatory value for "{config_key}" option interpolating {value} in {section} "{name}": {err})r/   valuer!   r"   err)recursive_interpolater0   r   r   r.   r   UnsetRequiredSubstitutionr2   )r!   r/   r1   r"   r    er   r   r   r   6   s*    r   c                    sx   dd  t | tjr&t| S t | trNt fdd|  D S t | trlfdd| D S t| S )Nc                 S   s   d | |S )Nz{}/{}r-   )config_pathr   r   r   r   appendM   s    z%recursive_interpolate.<locals>.appendc                 3   s(   | ] \}}|t | |fV  qd S r   r3   r   r7   r6   r    r   r   r#   S   s   z(recursive_interpolate.<locals>.<genexpr>c                    s   g | ]}t | qS r   r8   )r   r   )r6   r    r   r   
<listcomp>X   s     z)recursive_interpolate.<locals>.<listcomp>)	
isinstancesixstring_types	converterconvertr   r$   r%   list)objr    r6   r   r9   r   r3   L   s    

r3   c                   @   s6   e Zd Zdedddd Zedd Zdd	 Zd
S )r)   z
        %(delim)s(?:
            (?P<escaped>%(delim)s) |
            (?P<named>%(id)s)      |
            {(?P<braced>%(bid)s)}  |
            (?P<invalid>)
        )
        $z[_a-z][_a-z0-9]*z)[_a-z][_a-z0-9]*(?:(?P<sep>:?[-?])[^}]*)?)ZdelimidZbidc                 C   s   d|kr&|  d\}}}||p$|S d|krJ|  d\}}}|||S d|kr||  d\}}}||}|sxt||S d|kr|  d\}}}||kr||S t|d S )Nz:--z:??)	partitiongetr4   )bracedsepr   var_defaultr2   resultr   r   r   process_braced_groupj   s"    

z)TemplateWithDefaults.process_braced_groupc                    s    fdd}j |jS )Nc                    s   |  dp|  d}|  d}|d k	rB|  d}|rB|| S |d k	rr | }t|tjrh|d}d|f S |  dd k	rjS |  dd k	r|  tdj	d S )	NnamedrH   rI   zutf-8z%sZescapedZinvalidz#Unrecognized named group in pattern)
grouprN   r;   r<   Zbinary_typedecodeZ	delimiterZ_invalidr   pattern)ZmorO   rH   rI   r   r   r   r   r   r?      s$    




z0TemplateWithDefaults.substitute.<locals>.convert)rR   subtemplate)r   r   r?   r   rS   r   r      s    zTemplateWithDefaults.substituteN)	r   r   r   reescaperR   staticmethodrN   r   r   r   r   r   r)   \   s   
r)   c                   @   s   e Zd Zdd ZdS )r   c                 C   s
   || _ d S r   )r   r   r   r   r   r      s    zInvalidInterpolation.__init__Nr   r   r   r   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )r4   c                 C   s
   || _ d S r   )r2   )r   Zcustom_err_msgr   r   r   r      s    z"UnsetRequiredSubstitution.__init__NrY   r   r   r   r   r4      s   r4   z[^/]+z.+c                  G   s   t dd| S )Nz^{}$/)rV   compiler.   joinargsr   r   r   re_path   s    r_   c                 C   s   t | t|S r   r_   
PATH_JOKER)r"   r!   r   r   r   re_path_basic   s    rb   c                  G   s   t dtf|  S )Nservicer`   r]   r   r   r   service_path   s    rd   c                 C   sB   t | tjs| S |  } | dkr$dS | dkr0dS td| d S )N)yZyestrueZonT)nZnoZfalseZoffFz!"{}" is not a valid boolean value)r;   r<   r=   lowerr   r.   sr   r   r   
to_boolean   s    rk   c                 C   sl   t | tjs| S tjr6td|  r6d| dd   } zt| ddW S  tk
rf   td	| Y nX d S )Nz	^0[0-9]+$Z0or   r   )basez"{}" is not a valid integer)
r;   r<   r=   ZPY3rV   matchstripintr   r.   ri   r   r   r   to_int   s    rp   c                 C   sB   t | tjs| S z
t| W S  tk
r<   td| Y nX d S )Nz"{}" is not a valid float)r;   r<   r=   floatr   r.   ri   r   r   r   to_float   s    
rr   c                 C   s   t | tttfrd| S | S )Nz{})r;   boolrq   ro   r.   )or   r   r   to_str   s    
ru   c                 C   s"   t | }|d krtd| |S )Nz"{}" is not a valid byte value)r   r   r.   )rj   vr   r   r   bytes_to_int   s    rw   c                 C   s    t | tjs| S tt| d S )Ni  )r;   r<   r=   ro   r	   )rv   r   r   r   to_microseconds   s    rx   c                a   @   s  e Zd Zeddeedddeeddeeedeedeedeed	eed
eedeeddeeddeeddeedde	edde
eeddeedddeedddeedddeedddeedddeedeedeeede	edeeddeeddeed eed!e
eed!e
d"eed!e
d#eed$e	ed%e	ed&e	ed'e	ed(d%e	ed(d)d*e	ed(d+d,eed-d.e	ed-d/e	ed-d0e	ed-e
deeed)d/e	ed)e
deeed1d/e	ed1e
deeed2d/e	ed2e
deei/Zd3d4 Zd5S )6ConversionMapZblkio_configZweightZweight_deviceZbuildlabelsZcpus	cpu_countZ	cpu_quotaZ
cpu_periodZcpu_rt_periodZcpu_rt_runtimeZconfigsmodeZsecretsZhealthcheckZretriesdisableZdeployZreplicasZupdate_configZparallelismZmax_failure_ratioZrollback_configZrestart_policyZmax_attemptsZmem_swappinessZoom_kill_disableZoom_score_adjZportstargetZ	publishedZscaleZulimitsZsoftZhardZ
privilegedZ	read_onlyZ
stdin_openZttyZvolumesZvolumeZnocopyZtmpfssizeZnetworkZ
attachableZexternalZinternalZsecretr+   c                 C   sn   | j  D ]^}||r
z| j | |W   S  tk
rf } ztd|dd|W 5 d }~X Y q
X q
|S )Nz<Error while attempting to convert {} to appropriate type: {}rZ   .)mapkeysrm   r   r   r.   replace)r   pathr1   Zrexpr5   r   r   r   r?     s    

 zConversionMap.convertN)r   r   r   rd   rp   
FULL_JOKERru   rr   rx   rk   ra   rw   rb   r_   r   r?   r   r   r   r   ry      s    
 
           
  
 
 
 
 
         
 
      
 
           2ry   )*Z
__future__r   r   ZloggingrV   r   r   r<   errorsr   Zcompose.constr   r(   Zcompose.utilsr   r	   Z	getLoggerr   logobjectr
   r,   r0   r   r3   r)   	Exceptionr   r4   ra   r   r_   rb   rd   rk   rp   rr   ru   rw   rx   ry   r>   r   r   r   r   <module>   s>   
=
A