
    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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	b64encodei  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                  t         j                  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tempfileNamedTemporaryFilepathdirnameLOGdebugnamelenwriteclosechmodrename	Exceptionunlink)filenamecontentr   omodepreserve_mode	file_stattfes           r   
write_filer2       s   
 	)I<<	 1 12D 
B(()%e
 			GGL	
 	


$
		"''8$)  		*  >IIbggs)   4C? CD ?	D
D	D?#D::D?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_defaultr8   D   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dumpsr8   )datas    r   
json_dumpsrC   L   s"    ::& r   c                 8    t        | t        |      dz   d|      S )N
w)r-   r   )r2   rC   )r+   rB   r   s      r   
write_jsonrG   W   s%    44	 r   )r@   loggingr   r   r   base64r   r   
_DEF_PERMS	getLogger__name__r!   r   r   r2   r8   rC   rG    r   r   <module>rN      s^      	   '
g!- 'd%!HN %/ r   