x[h, 0ddlZddlZddlZddlZddlZddlmZmZddlm Z m Z dZ eje Ze jddZe jddZe d d fd Ze d d fd Zd Ze jddZe fdZy)N) b64decode b64encode) performanceutilizBase64 decodingc^t|} |jdS#t$r|cYSwxYw)zbase64 decode data :param source: a bytes or str to decode :return: base64 as a decoded str if utf-8 encoded, otherwise bytes utf-8)rdecodeUnicodeDecodeError)sourcedecodeds 9/usr/lib/python3/dist-packages/cloudinit/atomic_helper.pyb64drs6G~~g&& s  ,,zBase64 encodingcxt|ts|jd}t|j dS)zdbase64 encode data :param source: a bytes or str to decode :return: base64 encoded str r) isinstancebytesencoderr )r s r b64ers2 fe $w' V  # #G ,,wbFc|tjd|5t|||||cdddS#1swYyxYw)zCopen filename in mode omode, write content, set permissions to modezWriting N)rTimed _write_file)filenamecontentmodeomode preserve_modes r write_filer*sB   XhZ0 1J8WdE=IJJJs2;c |r5 tj|}tj|j}d} tj j |}tj|tj|d|}tjd||j||t||j||j!tj"|j|tj$|j|y#t$rYwxYw#t&$r(}|tj(|j|d}~wwxYw)NF)dirdeleterzOAtomically writing to file %s (via temporary file %s) - %s: [%o] %d bytes/chars)osstatS_IMODEst_modeOSErrorpathdirnamer ensure_dirtempfileNamedTemporaryFileLOGdebugnamelenwriteclosechmodrename Exceptionunlink) rrrrr file_stattfr(es r rr3s )I<< 1 12D B''//(+   ( (WU O    GG   L     $ "''8$)   *  > IIbgg s)4DCD% D"!D"% E.#EEc djt|S#t$rdjt|cYSwxYw)z1Handler for types which aren't json serializable.z ci-b64:{0}z)Warning: redacted unserializable type {0})formatrAttributeErrortype)_objs r json_serialize_defaultr>UsCN""4:.. N:AA$t*MMNs#AAz Dumping jsonc>tj|dddtS)z%Return data in nicely formatted json.T),z: )indent sort_keys separatorsdefault)jsondumpsr>)datas r json_dumpsrI]s$ :: &  rc8t|t|dzd|S)N w)rr)rrI)rrHrs r write_jsonrMis% 44   r)rFloggingr"r#r*base64rr cloudinitrr _DEF_PERMS getLogger__name__r,timedrrrrr>rIrMrr rVs  ''  g!$% & $%-&-'d%J'd%DN>"#%/r