a
   aQX]M                   @   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.9/site-packages/compose/config/interpolation.py__init__   s    zInterpolator.__init__c                 C   s4   z|  || jW S  ty.   t|Y n0 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                    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    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_path-   s    r-   c                 C   s   zt ||t||| W S  tyR } z$tdj|| ||jdW Y d }~nFd }~0  ty } z&tdj||| ||jdW Y d }~n
d }~0 0 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_interpolater-   r   r   r+   r   UnsetRequiredSubstitutionr/   )r   r,   r.   r    r   er   r   r   r   1   s*    r   c                    sr   dd  t | tr$t| S t | trH fdd|  D S t | trffdd| D S t| S )Nc                 S   s   d | |S )Nz{}/{}r*   )config_pathr   r   r   r   appendH   s    z%recursive_interpolate.<locals>.appendc              	      s$   i | ]\}}|t | |qS r   r0   r   r4   r3   r   r   r   r!   N   s   z)recursive_interpolate.<locals>.<dictcomp>c                    s   g | ]}t | qS r   r5   )r   r   )r3   r   r   r   
<listcomp>S       z)recursive_interpolate.<locals>.<listcomp>)
isinstancestr	converterconvertr   dictr"   list)objr   r3   r   r6   r   r0   G   s    


r0   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idZbidc                 C   s   d|kr&|  d\}}}||p$|S d|krJ|  d\}}}|||S d|kr|  d\}}}||}|s|pv|}t||S d|kr|  d\}}}||v r||S |p|}t|d S )Nz:--z:??)	partitiongetr1   )bracedsepr   var_defaultr/   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rB|  d}|rB|| S |d urp | }t|trf|d}d|S |  dd urjS |  dd ur|  tdj	d S )	NnamedrG   rH   zutf-8{}ZescapedZinvalidz#Unrecognized named group in pattern)
grouprM   r9   bytesdecoder+   Z	delimiterZ_invalidr   pattern)morN   rG   rH   r   r   r   r   r   r<      s$    





z0TemplateWithDefaults.substitute.<locals>.convert)rS   subtemplate)r   r   r<   r   rU   r   r   }   s    zTemplateWithDefaults.substituteN)
r   r   r   r+   reescaperS   staticmethodrM   r   r   r   r   r   r&   W   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 )r1   c                 C   s
   || _ d S r	   )r/   )r   Zcustom_err_msgr   r   r   r      s    z"UnsetRequiredSubstitution.__init__Nr[   r   r   r   r   r1      s   r1   z[^/]+z.+c                  G   s   t dd| S )Nz^{}$/)rX   compiler+   joinargsr   r   r   re_path   s    ra   c                 C   s   t | t|S r	   ra   
PATH_JOKER)r    r   r   r   r   re_path_basic   s    rd   c                  G   s   t dtg| R  S )NZservicerb   r_   r   r   r   service_path   s    re   c                 C   s@   t | ts| S |  } | dv r"dS | dv r.dS td| d S )N)yZyestrueZonT)nnoZfalseZoffFz!"{}" is not a valid boolean value)r9   r:   lowerr   r+   sr   r   r   
to_boolean   s    
rm   c                 C   sb   t | ts| S td|  r.d| dd   } zt| ddW S  ty\   td| Y n0 d S )Nz	^0[0-9]+$Z0or   r   )basez"{}" is not a valid integer)r9   r:   rX   matchstripintr   r+   rk   r   r   r   to_int   s    
rr   c                 C   s>   t | ts| S z
t| W S  ty8   td| Y n0 d S )Nz"{}" is not a valid float)r9   r:   floatr   r+   rk   r   r   r   to_float   s    

rt   c                 C   s   t | tttfrd| S | S )NrO   )r9   boolrs   rq   r+   )or   r   r   to_str   s    
rw   c                 C   s"   t | }|d u rtd| |S )Nz"{}" is not a valid byte value)r   r   r+   )rl   vr   r   r   bytes_to_int   s    ry   c                 C   s   t | ts| S tt| d S )Ni  )r9   r:   rq   r   )rx   r   r   r   to_microseconds   s    
rz   c                c   @   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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/d0e	ed/d1e	ed/d2e	ed/e
deeed+d1e	ed+e
deeed3d1e	ed3e
deeed4d1e	ed4e
deei0Zd5d6 Zd7S )8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	resourcesZlimitsZ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   sp   | j  D ]`}||r
z| j | |W   S  tyh } z$td|dd|W Y d }~q
d }~0 0 q
|S )Nz<Error while attempting to convert {} to appropriate type: {}r\   .)mapkeysro   r   r   r+   replace)r   pathr.   Zrexpr2   r   r   r   r<     s    
zConversionMap.convertN)r   r   r   re   rr   
FULL_JOKERrw   rt   rz   rm   rc   ry   rd   ra   r   r<   r   r   r   r   r{      sd   
















3r{   )%ZloggingrX   r   r   errorsr   Zcompose.constr   r%   Zcompose.utilsr   r   Z	getLoggerr   logr   r)   r-   r   r0   r&   	Exceptionr   r1   rc   r   ra   rd   re   rm   rr   rt   rw   ry   rz   r{   r;   r   r   r   r   <module>   s8   
?
B