o
    th7                     @   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   	