You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
24 lines
637 B
24 lines
637 B
5 years ago
|
import os
|
||
|
from atomicwrites import AtomicWriter
|
||
|
|
||
|
def atomic_write_in_dir(path, **kwargs):
|
||
|
"""Creates an atomic writer using a temporary file in the same directory
|
||
|
as the destination file.
|
||
|
"""
|
||
|
writer = AtomicWriter(path, **kwargs)
|
||
|
return writer._open(_get_fileobject_func(writer, os.path.dirname(path)))
|
||
|
|
||
|
def _get_fileobject_func(writer, temp_dir):
|
||
|
def _get_fileobject():
|
||
|
file_obj = writer.get_fileobject(dir=temp_dir)
|
||
|
os.chmod(file_obj.name, 0o644)
|
||
|
return file_obj
|
||
|
return _get_fileobject
|
||
|
|
||
|
def mkdirs_exists_ok(path):
|
||
|
try:
|
||
|
os.makedirs(path)
|
||
|
except OSError:
|
||
|
if not os.path.isdir(path):
|
||
|
raise
|