429 fp.close() |
429 fp.close() |
430 st = os.lstat(name) |
430 st = os.lstat(name) |
431 os.chmod(temp, st.st_mode) |
431 os.chmod(temp, st.st_mode) |
432 return temp |
432 return temp |
433 |
433 |
434 class atomicfile(file): |
434 class atomictempfile(file): |
435 """the file will only be copied on close""" |
435 """the file will only be copied when rename is called""" |
436 def __init__(self, name, mode, atomic=False): |
436 def __init__(self, name, mode): |
437 self.__name = name |
437 self.__name = name |
438 self.temp = mktempcopy(name) |
438 self.temp = mktempcopy(name) |
439 file.__init__(self, self.temp, mode) |
439 file.__init__(self, self.temp, mode) |
440 def close(self): |
440 def rename(self): |
441 if not self.closed: |
441 if not self.closed: |
442 file.close(self) |
442 file.close(self) |
443 rename(self.temp, self.__name) |
443 rename(self.temp, self.__name) |
444 def __del__(self): |
444 def __del__(self): |
445 self.close() |
445 if not self.closed: |
446 |
446 try: |
447 def o(path, mode="r", text=False, atomic=False): |
447 os.unlink(self.temp) |
|
448 except: pass |
|
449 file.close(self) |
|
450 |
|
451 class atomicfile(atomictempfile): |
|
452 """the file will only be copied on close""" |
|
453 def __init__(self, name, mode): |
|
454 atomictempfile.__init__(self, name, mode) |
|
455 def close(self): |
|
456 self.rename() |
|
457 def __del__(self): |
|
458 self.rename() |
|
459 |
|
460 def o(path, mode="r", text=False, atomic=False, atomictemp=False): |
448 if audit_p: |
461 if audit_p: |
449 audit_path(path) |
462 audit_path(path) |
450 f = os.path.join(p, path) |
463 f = os.path.join(p, path) |
451 |
464 |
452 if not text: |
465 if not text: |