forked from M-Labs/artiq
pyon/store_file: replace previous file atomically
This commit is contained in:
parent
fc449509b8
commit
ae4615281f
|
@ -20,6 +20,8 @@ function call syntax to mark special data types.
|
||||||
|
|
||||||
import base64
|
import base64
|
||||||
from fractions import Fraction
|
from fractions import Fraction
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
|
||||||
import numpy
|
import numpy
|
||||||
|
|
||||||
|
@ -158,18 +160,17 @@ def decode(s):
|
||||||
|
|
||||||
|
|
||||||
def store_file(filename, x):
|
def store_file(filename, x):
|
||||||
"""Encodes a Python object and writes it to the specified file.
|
"""Encodes a Python object and writes it to the specified file."""
|
||||||
|
|
||||||
"""
|
|
||||||
contents = encode(x, True)
|
contents = encode(x, True)
|
||||||
with open(filename, "w") as f:
|
directory = os.path.abspath(os.path.dirname(filename))
|
||||||
|
with tempfile.NamedTemporaryFile("w", dir=directory, delete=False) as f:
|
||||||
f.write(contents)
|
f.write(contents)
|
||||||
f.write("\n")
|
f.write("\n")
|
||||||
|
tmpname = f.name
|
||||||
|
os.replace(tmpname, filename)
|
||||||
|
|
||||||
|
|
||||||
def load_file(filename):
|
def load_file(filename):
|
||||||
"""Parses the specified file and returns the decoded Python object.
|
"""Parses the specified file and returns the decoded Python object."""
|
||||||
|
|
||||||
"""
|
|
||||||
with open(filename, "r") as f:
|
with open(filename, "r") as f:
|
||||||
return decode(f.read())
|
return decode(f.read())
|
||||||
|
|
Loading…
Reference in New Issue