import os
import shutil
-def make_dirs(dirname):
+class FileLockException(Exception):
+ pass
+class FileLock(object):
+ def __init__(self, file_name, timeout=10, delay=.05):
+ self.is_locked = False
+ self.lockfile = os.path.join(os.getcwd(), "%s.lock" % file_name)
+ self.file_name = file_name
+ self.timeout = timeout
+ self.delay = delay
+ def acquire(self):
+ self.fd = os.open(self.lockfile, os.O_CREAT|os.O_EXCL|os.O_RDWR)
+ self.is_locked = True
+ def release(self):
+ if self.is_locked:
+ os.close(self.fd)
+ os.unlink(self.lockfile)
+ self.is_locked = False
+ def __enter__(self):
+ if not self.is_locked:
+ self.acquire()
+ return self
+ def __exit__(self, type, value, traceback):
+ if self.is_locked:
+ self.release()
+ def __del__(self):
+ self.release()
+
+def make_dirs(path):
try:
- os.makedirs(dirname)
+ os.makedirs(path)
except OSError as err:
if err.errno != errno.EEXIST:
raise
make_dirs(os.path.dirname(path))
with(open(path, 'w')) as f:
f.write(data)
-
+
def decompress_gzip(intput_path, output_path):
with(gzip.open(intput_path, 'rb')) as fobj:
f = open(output_path, 'wb')
f.close()
return output_path
+def copyfile_flock(src, dest):
+ ret = dest;
+ try:
+ with FileLock(dest):
+ shutil.copy(src, dest)
+ except OSError as e:
+ if e.errno != errno.EEXIST:
+ print(e)
+ ret = src
+ return ret
+
def copyfile(src, dst, filename=None):
abs_dst=os.path.abspath(os.path.expanduser(dst))
make_dirs(abs_dst)