a 'Dg?@sfddlZddlZddlmZddlZdZedeededgZddZGd d d ej Z dS) N)StringIOz[a-zA-Z_]+[a-zA-Z0-9_]*z\$z\$[0-9#\?\-@\*]z\$\{.+\}cCstD]}||rdSqdS)NTF)SHELL_VAR_REGEXESsearch)textrrF/usr/lib/python3.9/site-packages/cloudinit/distros/parsers/sys_conf.py_contains_shell_variable$s r c@s2eZdZdZddZddZd ddZd d Zd S) SysConfaA 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"). cCstjj||ddddS)NFT)Z interpolationZwrite_empty_values) configobj ConfigObj__init__)selfcontentsrrrr 4szSysConf.__init__cCsD|}t}t|ttfr.|d|n|t||S)N )writer isinstancelisttuplejoinstrgetvalue)rrZ out_contentsrrr__str__9s zSysConf.__str__Fcst|tstd|t|dkr&dSd}|ddvr\|ddvr\t|dkrfdd}n`|d rz|d rznBtd |rt |rtd |rfd d}qfdd}nt j }|s|S||S)NzValue "%s" is not a stringr)"'cs||SNZ_get_single_quotexrrrKz SysConf._quote..z$()z [\t\r\n ]z[\n\"']cs||Sr)Z_get_triple_quoter r"rrr#Yr$cs||Srrr r"rrr#]r$) rr ValueErrorlenstrip startswithendswithrerr shlexquote)rvalueZ multilineZ quot_funcrr"r_quoteBs,         zSysConf._quotecCs<|||}|||}||}d||d||fS)Nz %s%s%s%s%s=)Z_decode_elementr/)rZ indent_stringentryZ this_entryZcommentvalkeyZcmntrrr _write_linees zSysConf._write_lineN)F)__name__ __module__ __qualname____doc__r rr/r4rrrrr +s  #r ) r+r,iorr ZSHELL_VAR_RULEcompilerr r r rrrrs