3
\me @ s d dl Z d dlZd dlZd dlZd dlZd dlmZmZ dZej e
Zdd Zdd Z
edd fd
dZdd
Zdd ZefddZdS ) N) b64decode b64encodei c C s, t | }y
|jdS tk
r& |S X d S )Nzutf-8)r decodeUnicodeDecodeError)sourceZdecoded r #/usr/lib/python3.6/atomic_helper.pyb64d s
r c C s" t | ts| jd} t| jdS )Nzutf-8)
isinstancebytesencoder r )r r r r b64e s
r
wbFc C s |r4yt j| }tj|j}W n tk
r2 Y nX d }ydtjt jj| d|d}t j
d| |j||t| |j
| |j t j|j| t j|j| W n: tk
r } z|d k rt j|j |W Y d d }~X nX d S )NF)dirdeletemodezOAtomically writing to file %s (via temporary file %s) - %s: [%o] %d bytes/chars)osstatS_IMODEst_modeOSErrortempfileZNamedTemporaryFilepathdirnameLOGdebugnamelenwriteclosechmodrename Exceptionunlink)filenameZcontentr omodeZ
preserve_modeZ file_statZtfer r r
write_file s2
r' c C s2 ydj t| S tk
r, dj t| S X dS )z1Handler for types which aren't json serializable.z
ci-b64:{0}z)Warning: redacted unserializable type {0}N)formatr
AttributeErrortype)Z_objr r r json_serialize_defaultD s r+ c C s t j| dddtdS )z%Return data in nicely formatted json. T,: )indentZ sort_keysZ
separatorsdefault)r- r. )jsondumpsr+ )datar r r
json_dumpsL s r4 c C s t | t|d d|dS )N
w)r% r )r' r4 )r$ r3 r r r r
write_jsonW s
r7 )r1 Zloggingr r r base64r r Z
_DEF_PERMSZ getLogger__name__r r r
r' r+ r4 r7 r r r r