
    x[h,                     0   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	m
Z
 dZ ej                  e      Z e	j                  d      d        Z e	j                  d      d        Zed	d
fdZed	d
fdZd Z e	j                  d      d        ZefdZy)    N)	b64decode	b64encode)performanceutili  zBase64 decodingc                 ^    t        |       }	 |j                  d      S # t        $ r |cY S w xY w)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)r   decodeUnicodeDecodeError)sourcedecodeds     9/usr/lib/python3/dist-packages/cloudinit/atomic_helper.pyb64dr      s6     G~~g&& s    ,,zBase64 encodingc                 x    t        | t              s| j                  d      } t        |       j	                  d      S )zdbase64 encode data

    :param source: a bytes or str to decode
    :return: base64 encoded str
    r   )
isinstancebytesencoder   r	   )r   s    r   b64er      s2     fe$w'V##G,,    wbFc                 |    t        j                  d|        5  t        | ||||      cddd       S # 1 sw Y   yxY w)zCopen filename in mode omode, write content, set permissions to modezWriting N)r   Timed_write_file)filenamecontentmodeomodepreserve_modes        r   
write_filer   *   sB    
 
		XhZ0	1 J8WdE=IJ J Js   2;c           
         |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deleter   zOAtomically 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)	r   r   r   r   r   	file_stattfr(   es	            r   r   r   3   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>   U   sC    N""4:.. N:AA$t*MMNs    #AAzDumping jsonc                 >    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_dumpsrI   ]   s$     ::& r   c                 8    t        | t        |      dz   d|      S )N
w)r   r   )r   rI   )r   rH   r   s      r   
write_jsonrM   i   s%    44	 r   )rF   loggingr"   r#   r*   base64r   r   	cloudinitr   r   
_DEF_PERMS	getLogger__name__r,   timedr   r   r   r   r>   rI   rM    r   r   <module>rV      s      	   ' '
g! $%
 &
 $%- &- 'd%J 'd%DN >" # %/ r   