
    }f

                         d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	 dZ
 ej                  e      Zd Zd Ze
ddfd	Zd
 Zd Ze
fdZy)    N)	b64decode	b64encode)utili  c                 ^    t        |       }	 |j                  d      S # t        $ r |cY S w xY wNzutf-8)r   decodeUnicodeDecodeError)sourcedecodeds     9/usr/lib/python3/dist-packages/cloudinit/atomic_helper.pyb64dr      s6     G~~g&& s    ,,c                 x    t        | t              s| j                  d      } t        |       j	                  d      S r   )
isinstancebytesencoder   r   )r
   s    r   b64er      s2     fe$w'V##G,,    wbFc           
         |r5	 t        j                  |       }t        j                  |j                        }d }	 t         j
                  j                  |       }t        j                  |       t        j                  |d|      }t        j                  d| |j                  ||t        |             |j                  |       |j!                          t        j"                  |j                  |       t        j$                  |j                  |        y # t        $ r Y w xY w# t&        $ r(}|t        j(                  |j                         |d }~ww xY w)NF)dirdeletemodezOAtomically writing to file %s (via temporary file %s) - %s: [%o] %d bytes/chars)osstatS_IMODEst_modeOSErrorpathdirnamer   
ensure_dirtempfileNamedTemporaryFileLOGdebugnamelenwriteclosechmodrename	Exceptionunlink)	filenamecontentr   omodepreserve_mode	file_stattfr   es	            r   
write_filer4   "   s   
 	)I<<	 1 12D 
B''//(+ ((WUO		GGL	
 	


$
		"''8$)  		*  >IIbggs)   4D CD% 	D"!D"%	E.#EEc                     	 dj                  t        |             S # t        $ r dj                  t        |             cY S w xY w)z1Handler for types which aren't json serializable.z
ci-b64:{0}z)Warning: redacted unserializable type {0})formatr   AttributeErrortype)_objs    r   json_serialize_defaultr:   F   sC    N""4:.. N:AA$t*MMNs    #AAc                 >    t        j                  | dddt              S )z%Return data in nicely formatted json.   T),z: )indent	sort_keys
separatorsdefault)jsondumpsr:   )datas    r   
json_dumpsrE   N   s"    ::& r   c                 8    t        | t        |      dz   d|      S )N
w)r/   r   )r4   rE   )r-   rD   r   s      r   
write_jsonrI   Y   s%    44	 r   )rB   loggingr   r   r!   base64r   r   	cloudinitr   
_DEF_PERMS	getLogger__name__r#   r   r   r4   r:   rE   rI    r   r   <module>rQ      sa      	   ' 
g!- 'd%!HN %/ r   