def mkstemp(self): """Contextmanager to make a temporary file.""" # Creating intermidiate directories and corresponding metadata. # For optimization, check if the subdirectory already exists, # if exists, then it means that it also has its metadata. # Not checking for container, since the container should already # exist for the call to come here. if not os_path.exists(self.datadir): path = self._container_path subdir_list = self._obj_path.split(os.path.sep) for i in range(len(subdir_list)): path = os.path.join(path, subdir_list[i]); if not os_path.exists(path): self._create_dir_object(path) tmpfile = '.' + self._obj + '.' + md5(self._obj + \ str(random.random())).hexdigest() self.tmppath = os.path.join(self.datadir, tmpfile) fd = do_open(self.tmppath, os.O_RDWR | os.O_CREAT | os.O_EXCL) try: yield fd finally: try: do_close(fd) except OSError: pass tmppath, self.tmppath = self.tmppath, None try: do_unlink(tmppath) except OSError as err: if err.errno != errno.ENOENT: raise
def close(self, verify_file=True): """ Close the file. Will handle quarantining file if necessary. :param verify_file: Defaults to True. If false, will not check file to see if it needs quarantining. """ #Marker directory if self._is_dir: return if self.fp: do_close(self.fp) self.fp = None