a
   ?Q3)                   @   s   d dl Z d dlmZ d dlmZ d dlmZ dd Zdd Z	d	d
 Z
dd Ze jeje	 e jeje e jeje e jeje e jeje	 e jeje	 e jeje	 dddZdddZdd ZdddZdS )    N)types)COMPOSE_SPEC)COMPOSEFILE_V1c                 C   s   | j }|| S N)represent_strreprdumperdataZrepresenter r   </usr/lib/python3.9/site-packages/compose/config/serialize.pyserialize_config_type   s    r   c                 C   s   |  | S r   )Zrepresent_dictr   r	   r
   r   r   r   serialize_dict_type   s    r   c                 C   s>   | j }t|tr|d}| dv r6| jd|ddS ||S )z6 Ensure boolean-like strings are quoted in the output zutf-8)ynZyesnoZonZofftrueZfalseztag:yaml.org,2002:str")Zstyle)r   
isinstancebytesdecodelowerZrepresent_scalarr   r   r   r   serialize_string   s    

r   c                 C   s   | dd}t| |S )zN Ensure boolean-like strings are quoted in the output and escape $ characters $z$$)replacer   r   r   r   r   serialize_string_escape_dollar   s    r   c                    s   dt  ji} fdd jD }dd |D |d< dD ]d}t |}|sNq:| ||< ||  D ]6\}}d|v r||d= d	|v rfd
|v rft|d
 |d
< qfq:|S )Nversionc                    s*   g | ]"}t | jr |d   ndqS )nameN)denormalize_service_dictr   .0service_dictconfigimage_digestsr   r   
<listcomp>0   s   z&denormalize_config.<locals>.<listcomp>c                 S   s   i | ]}| d |qS )r   )popr    r   r   r   
<dictcomp>7   s   z&denormalize_config.<locals>.<dictcomp>services)ZnetworksvolumesZsecretsZconfigsZexternal_namer   Zexternal)strZconfig_versionr)   getattrcopyitemsbool)r$   r%   resultZdenormalized_serviceskeyZconfig_dictr   Zconfr   r#   r   denormalize_config.   s&    

r2   Tc                 C   sX   |r"t jtt t jtt nt jtt t jtt t jt| |dddddS )NF   P   T)Zdefault_flow_styleindentwidthZallow_unicode)yaml
SafeDumperadd_representerr+   r   r   Z	safe_dumpr2   )r$   r%   Zescape_dollarr   r   r   serialize_configK   s    r:   c                 C   s^   | df}g d}|D ]>}| |d  }|t | |d  krN|} t | |d f}q qTqdj| S )Nns))     @@us)r<   ms)r<   s)      N@m)r@   hr      z{}{})intformat)valuer0   tableZstagetmpr   r   r   serialize_ns_time_value[   s    rI   c                    s
  |   } |r|| d< d| v r.t| d | d<  tkrFd| vrFd| d< d| v rd| d v rrt| d d | d d< d| d v rt| d d | d d< d| d v rt| d d | d d< d	| v r܇ fd
d| d	 D | d	< d| v r tkrdd | d D | d< | S )NZimageZrestartZnetwork_modeZbridgeZhealthcheckintervaltimeoutZstart_periodZportsc                    s&   g | ]}|j s tk r| n|qS r   )Zexternal_ipVERSIONlegacy_repr)r!   pr   r   r   r&      s   z,denormalize_service_dict.<locals>.<listcomp>r*   c                 S   s$   g | ]}t |tjr| n|qS r   )r   r   	MountSpecrM   )r!   vr   r   r   r&      s   )r-   r   Zserialize_restart_specV1rI   )r"   r   Zimage_digestr   rO   r   r   n   s>    





r   )N)NT)N)r7   Zcompose.configr   Zcompose.constr   rL   r   rR   r   r   r   r   r8   r9   rP   ZVolumeFromSpecZ
VolumeSpecZSecurityOptZServiceSecretZServiceConfigZServicePortr2   r:   rI   r   r   r   r   r   <module>   s$   

