f?ddlZddlZddlmZddlZdZej dezej dej dgZdZGdd ejZ y) N)StringIOz[a-zA-Z_]+[a-zA-Z0-9_]*z\$z\$[0-9#\?\-@\*]z\$\{.+\}c@tD]}|j|syy)NTF)SHELL_VAR_REGEXESsearch)textrs D/usr/lib/python3/dist-packages/cloudinit/distros/parsers/sys_conf.py_contains_shell_variabler $s$  88D> c*eZdZdZdZdZddZdZy)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"). cJtjj||ddy)NFT) interpolationwrite_empty_values) configobj ConfigObj__init__)selfcontentss r rzSysConf.__init__4s$$$ (%D % r c|j}t}t|ttfr0|jdj ||jS|jt ||jS)N )writer isinstancelisttuplejoinstrgetvalue)rr out_contentss r __str__zSysConf.__str__9sm::<z hu .   tyy2 3$$&&   s8} -$$&&r ct|tstd|zt|dk(ryd}|ddvr|ddvrt|dk(rfd}n|j j dr |j j d rnStjd |r=t|r"tjd |rfd }nfd }ntj}|s|S||S)NzValue "%s" is not a stringr)"'c,j||zSN_get_single_quotexrs r z SysConf._quote..Ksd44Q7!;r z$()z [\t\r\n ]z[\n\"']c,j||zSr()_get_triple_quoter+s r r-z SysConf._quote..Y$*@*@*Ca*Gr c,j||zSr(r)r+s r r-z SysConf._quote..]r1r ) rr ValueErrorlenstrip startswithendswithrerr shlexquote)rvalue multiline quot_funcs` r _quotezSysConf._quoteBs%%9UCD D u:? 8z !eBi:&=5zQ; {{}''-%++-2H2H2M99\51/699Z7 G& !H&%*KK Lr c|j|j|}|j|j|}|j|}||d||S)N=)_decode_elementr>)r indent_stringentry this_entrycommentvalkeycmnts r _write_linezSysConf._write_linees_""4;;z#:;""4;;u#56##G,        r N)F)__name__ __module__ __qualname____doc__rr r>rIr r r r +s '! F  r r ) r8r9iorrSHELL_VAR_RULEcompilerr rr rNr r rRsq  ,BJJu~%&BJJ!"BJJ{ F i!!F r