o
    S`                     @   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datarepresenter r   :/usr/lib/python3/dist-packages/compose/config/serialize.pyserialize_config_type   s   r   c                 C   s   |  | S r   )represent_dictr   r	   r
   r   r   r   serialize_dict_type   s   r   c                 C   s>   | j }t|tr|d}| dv r| jd|ddS ||S )z6 Ensure boolean-like strings are quoted in the output zutf-8)ynyesnoonofftruefalseztag:yaml.org,2002:str")style)r   
isinstancebytesdecodelower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 ]2}t |}|s'q| ||< ||  D ]\}}d|v r>|d= d	|v rNd
|v rNt|d
 |d
< q3q|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)networksvolumessecretsconfigsexternal_namer&   external)strconfig_versionr1   getattrcopyitemsbool)r,   r-   resultdenormalized_serviceskeyconfig_dictr&   confr   r+   r   denormalize_config.   s*   

rC   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)default_flow_styleindentwidthallow_unicode)yaml
SafeDumperadd_representerr8   r$   r!   	safe_dumprC   )r,   r-   escape_dollarr   r   r   serialize_configK   s   rO   c                 C   sZ   | df}g d}|D ]}| |d  }|t | |d  kr'|} t | |d f}q
 dj| S )Nns))     @@us)rQ   ms)rQ   s)      N@m)rU   hr      z{}{})intformat)valuer>   tablestagetmpr   r   r   serialize_ns_time_value[   s   
r_   c                    s  |   } |r
|| d< d| v rt| d | d<  tkr#d| vr#d| d< d| v r]d| d v r9t| d d | d d< d| d v rKt| d d | d d< d| d v r]t| d d | d d< d	| v rn fd
d| d	 D | d	< d| v r tkrdd | d D | d< | S )Nimagerestartnetwork_modebridgehealthcheckintervaltimeoutstart_periodportsc                    s&   g | ]}|j s tk r| n|qS r   )external_ipVERSIONlegacy_repr)r)   pr%   r   r   r.      s    z,denormalize_service_dict.<locals>.<listcomp>r3   c                 S   s$   g | ]}t |tjr| n|qS r   )r   r   	MountSpecrk   )r)   vr   r   r   r.      s    )r;   r   serialize_restart_specV1r_   )r*   r%   image_digestr   rm   r   r'   n   s>   





r'   r   )NT)rJ   compose.configr   compose.constr   rj   r   rq   r   r   r!   r$   rK   rL   rn   VolumeFromSpec
VolumeSpecSecurityOptServiceSecretServiceConfigServicePortrC   rO   r_   r'   r   r   r   r   <module>   s&    

