o
    x[h7  ã                   @   sF   d dl Z d dlZd dlmZ d dlZdZdd„ ZG dd„ dejƒZdS )é    N)ÚStringIOz[a-zA-Z_]+[a-zA-Z0-9_]*c                 C   s:   t  dt ¡t  d¡t  d¡fD ]
}| | ¡r dS qdS )Nz\$z\$[0-9#\?\-@\*]z\$\{.+\}TF)ÚreÚcompileÚSHELL_VAR_RULEÚsearch)ÚtextÚr© r	   úD/usr/lib/python3/dist-packages/cloudinit/distros/parsers/sys_conf.pyÚ_contains_shell_variable   s   ø

ÿr   c                   @   s2   e Zd ZdZdd„ Zdd„ Zddd„Zd	d
„ ZdS )ÚSysConfa  A configobj.ConfigObj subclass specialised for sysconfig files.

    :param contents:
        The sysconfig file to parse, in a format accepted by
        ``configobj.ConfigObj.__init__`` (i.e. "a filename, file like object,
        or list of lines").
    c                 C   s   t jj| |ddd� d S )NFT)ÚinterpolationÚwrite_empty_values)Ú	configobjÚ	ConfigObjÚ__init__)ÚselfÚcontentsr	   r	   r
   r   3   s   
ÿzSysConf.__init__c                 C   sJ   |   ¡ }tƒ }t|ttfƒr|  d |¡¡ | ¡ S |  t|ƒ¡ | ¡ S )NÚ
)Úwriter   Ú
isinstanceÚlistÚtupleÚjoinÚstrÚgetvalue)r   r   Úout_contentsr	   r	   r
   Ú__str__8   s   ÿzSysConf.__str__Fc                    sÄ   t |tƒstd| ƒ‚|sdS d }|d dv r*|d dv r*t|ƒdkr)‡ fdd„}n0| ¡  d	¡r9| ¡  d
¡r9n!t d|¡rZt	|ƒrWt d|¡rP‡ fdd„}n
‡ fdd„}nt
j}|s^|S ||ƒS )NzValue "%s" is not a stringÚ r   )ú"ú'éÿÿÿÿé   c                    ó   ˆ   | ¡|  S ©N©Ú_get_single_quote©Úx©r   r	   r
   Ú<lambda>J   ó    z SysConf._quote.<locals>.<lambda>z$(ú)z	[\t\r\n ]z[\n\"']c                    r#   r$   )Ú_get_triple_quoter'   r)   r	   r
   r*   X   r+   c                    r#   r$   r%   r'   r)   r	   r
   r*   \   r+   )r   r   Ú
ValueErrorÚlenÚstripÚ
startswithÚendswithr   r   r   ÚshlexÚquote)r   ÚvalueÚ	multilineÚ	quot_funcr	   r)   r
   Ú_quoteA   s.   

ÿ€
ÿ
ÿzSysConf._quotec                 C   s<   |   |  |¡¡}|   |  |¡¡}|   |¡}d||d||f S )Nz
%s%s%s%s%sú=)Ú_decode_elementr8   )r   Úindent_stringÚentryÚ
this_entryÚcommentÚvalÚkeyÚcmntr	   r	   r
   Ú_write_lined   s   
ûzSysConf._write_lineN)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r8   rB   r	   r	   r	   r
   r   *   s    
	#r   )	r   r3   Úior   r   r   r   r   r   r	   r	   r	   r
   Ú<module>   s   	