o
    S`E'                     @   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 e eZG dd	 d	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-Z#e# Z$dS ).    N)Template   )ConfigurationError)COMPOSEFILE_V1)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   s,   z
|  || jW S  ty   t|w 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                    sB   | t kr
tt| ntt|  fddfdd| D S )Nc                    s    fdd|p
i   D S )Nc              	      s"   i | ]\}}|t || qS r   )interpolate_value.0keyval)interpolatornamesectionr   r   
<dictcomp>"   s    zKinterpolate_environment_variables.<locals>.process_item.<locals>.<dictcomp>)items)r   config_dict)r   r    )r   r   process_item!   s   
z7interpolate_environment_variables.<locals>.process_itemc                    s    i | ]\}}| ||pi qS r   r   )r   r   r#   )r$   r   r   r!   '   s    z5interpolate_environment_variables.<locals>.<dictcomp>)V1r   r   TemplateWithDefaultsr"   )versionconfigr    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_path-   s   r.   c                 C   sx   zt ||t||| W S  ty# } ztdj|| ||jdd }~w ty; } ztdj||| ||jdd }~ww )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_interpolater.   r   r   r,   r   UnsetRequiredSubstitutionr0   )r   r-   r/   r    r   er   r   r   r   1   s2   r   c                    sr   dd  t | trt| S t | tr$ fdd|  D S t | tr3fdd| D S t| S )Nc                 S   s   d | |S )Nz{}/{}r+   )config_pathr   r   r   r   appendH      z%recursive_interpolate.<locals>.appendc              	      s$   i | ]\}}|t | |qS r   r1   r   r5   r4   r   r   r   r!   N   s    z)recursive_interpolate.<locals>.<dictcomp>c                    s   g | ]}t | qS r   r7   )r   r   )r4   r   r   r   
<listcomp>S   s    z)recursive_interpolate.<locals>.<listcomp>)
isinstancestr	converterconvertr   dictr"   list)objr   r4   r   r8   r   r1   G   s   


r1   c                   @   s6   e Zd ZdjeddddZedd Zdd	 Z	d
S )r&   z
        {delim}(?:
            (?P<escaped>{delim}) |
            (?P<named>{id})      |
            {{(?P<braced>{bid})}}  |
            (?P<invalid>)
        )
        $z[_a-z][_a-z0-9]*z)[_a-z][_a-z0-9]*(?:(?P<sep>:?[-?])[^}]*)?)delimidbidc                 C   s   d|kr|  d\}}}||p|S d|kr%|  d\}}}|||S d|krB|  d\}}}||}|s@|p;|}t||S d|kr_|  d\}}}||v rW||S |pZ|}t|d S )Nz:--z:??)	partitiongetr2   )bracedsepr   var_defaultr0   resultr   r   r   process_braced_groupe   s(   

z)TemplateWithDefaults.process_braced_groupc                    s    fdd}j |jS )Nc                    s   |  dp	|  d}|  d}|d ur!|  d}|r!|| S |d ur8 | }t|tr3|d}d|S |  dd urBjS |  dd urN|  tdj	)	NnamedrI   rJ   zutf-8{}escapedinvalidz#Unrecognized named group in pattern)
grouprO   r:   bytesdecoder,   	delimiter_invalidr   pattern)morP   rI   rJ   r   r   r   r   r   r=      s$   





z0TemplateWithDefaults.substitute.<locals>.convert)rY   subtemplate)r   r   r=   r   r[   r   r   }   s   zTemplateWithDefaults.substituteN)
r   r   r   r,   reescaperY   staticmethodrO   r   r   r   r   r   r&   W   s    
r&   c                   @      e Zd Zdd ZdS )r   c                 C   
   || _ d S r	   )r   r   r   r   r   r         
zInvalidInterpolation.__init__Nr   r   r   r   r   r   r   r   r          r   c                   @   ra   )r2   c                 C   rb   r	   )r0   )r   custom_err_msgr   r   r   r      rc   z"UnsetRequiredSubstitution.__init__Nrd   r   r   r   r   r2      re   r2   z[^/]+z.+c                  G   s   t dd| S )Nz^{}$/)r^   compiler,   joinargsr   r   r   re_path   s   rl   c                 C   s   t | t|S r	   rl   
PATH_JOKER)r    r   r   r   r   re_path_basic   r6   ro   c                  G   s   t dtg| R  S )Nservicerm   rj   r   r   r   service_path   s   rq   c                 C   s<   t | ts| S |  } | dv rdS | dv rdS td| )N)yyestrueonT)nnofalseoffFz!"{}" is not a valid boolean value)r:   r;   lowerr   r,   sr   r   r   
to_boolean   s   
r}   c                 C   sZ   t | ts| S td|  rd| dd   } zt| ddW S  ty,   td| w )Nz	^0[0-9]+$0or   r   )basez"{}" is not a valid integer)r:   r;   r^   matchstripintr   r,   r{   r   r   r   to_int   s   
r   c                 C   s6   t | ts| S zt| W S  ty   td| w )Nz"{}" is not a valid float)r:   r;   floatr   r,   r{   r   r   r   to_float   s   

r   c                 C   s   t | tttfrd| S | S )NrQ   )r:   boolr   r   r,   )or   r   r   to_str   s   
r   c                 C   s"   t | }|d u rtd| |S )Nz"{}" is not a valid byte value)r   r   r,   )r|   vr   r   r   bytes_to_int   s   r   c                 C   s   t | ts| S tt| d S )Ni  )r:   r;   r   r   )r   r   r   r   to_microseconds   s   
r   c                "   @   s`  e Zd Zi 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dei 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/d0eed1d2e	ed1d3e	ed1d4e	ed1e
deeed-d3e	ed-e
deeed5d3e	ed5e
deeed6d3e	ed6e
deeiZd7d8 Zd9S ):ConversionMapblkio_configweightweight_devicebuildlabelscpus	cpu_count	cpu_quota
cpu_periodcpu_rt_periodcpu_rt_runtimeconfigsmodesecretshealthcheckretriesdisabledeployreplicas	placementmax_replicas_per_node	resourceslimitsupdate_configparallelismmax_failure_ratiorollback_configrestart_policymax_attemptsmem_swappinessoom_kill_disableoom_score_adjportstarget	publishedscaleulimitssofthard
privileged	read_only
stdin_openttyvolumesvolumenocopytmpfssizenetwork
attachableexternalinternalsecretr(   c                 C   sd   | j  D ]*}||r/z
| j | |W   S  ty. } ztd|dd|d }~ww q|S )Nz<Error while attempting to convert {} to appropriate type: {}rg   .)mapkeysr   r   r   r,   replace)r   pathr/   rexpr3   r   r   r   r=     s   
	zConversionMap.convertN)r   r   r   rq   r   
FULL_JOKERr   r   r   r}   rn   r   ro   rl   r   r=   r   r   r   r   r      s    
	









 !"#






4r   )%loggingr^   r   r   errorsr   compose.constr   r%   compose.utilsr   r   	getLoggerr   logr   r*   r.   r   r1   r&   	Exceptionr   r2   rn   r   rl   ro   rq   r}   r   r   r   r   r   r   r<   r   r   r   r   <module>   s:    
?

C