|
|
@ -233,18 +233,24 @@ else: |
|
|
|
def write_json_file(obj, fn): |
|
|
|
""" Encode obj as JSON and write it to fn, atomically """ |
|
|
|
|
|
|
|
args = { |
|
|
|
'suffix': '.tmp', |
|
|
|
'prefix': os.path.basename(fn) + '.', |
|
|
|
'dir': os.path.dirname(fn), |
|
|
|
'delete': False, |
|
|
|
} |
|
|
|
|
|
|
|
# In Python 2.x, json.dump expects a bytestream. |
|
|
|
# In Python 3.x, it writes to a character stream |
|
|
|
if sys.version_info < (3, 0): |
|
|
|
mode = 'wb' |
|
|
|
encoding = None |
|
|
|
args['mode'] = 'wb' |
|
|
|
else: |
|
|
|
mode = 'w' |
|
|
|
encoding = 'utf-8' |
|
|
|
tf = tempfile.NamedTemporaryFile( |
|
|
|
suffix='.tmp', prefix=os.path.basename(fn) + '.', |
|
|
|
dir=os.path.dirname(fn), |
|
|
|
delete=False) |
|
|
|
args.update({ |
|
|
|
'mode': 'w', |
|
|
|
'encoding': 'utf-8', |
|
|
|
}) |
|
|
|
|
|
|
|
tf = tempfile.NamedTemporaryFile(**args) |
|
|
|
|
|
|
|
try: |
|
|
|
with tf: |
|
|
|