def _open_w (self, mode, bufsize, backup_name) : """Open locked file for writing""" curr_key, tmp_name = self._get_key_save () result = None try : if curr_key == self.last_key : if curr_key : if backup_name : bak_name = Filename (backup_name, self.file_name).name self.backup_name = bak_name sos.rename (tmp_name, bak_name) else : self.backup_name = None sos.remove (tmp_name) result = open (self.file_name, mode, bufsize) self.exists = 1 else : self.changed_key = curr_key raise Sync_Conflict (self) finally : if not result : sos.rename (tmp_name, self.file_name) else : self._write_header (result) return result
def _open_w(self, mode, bufsize, backup_name): """Open locked file for writing""" curr_key, tmp_name = self._get_key_save() result = None try: if curr_key == self.last_key: if curr_key: if backup_name: bak_name = Filename(backup_name, self.file_name).name self.backup_name = bak_name sos.rename(tmp_name, bak_name) else: self.backup_name = None sos.remove(tmp_name) result = open(self.file_name, mode, bufsize) self.exists = 1 else: self.changed_key = curr_key raise Sync_Conflict(self) finally: if not result: sos.rename(tmp_name, self.file_name) else: self._write_header(result) return result
def write_plan(Y, plan_file_name, replace=False): today = CAL.Date_Time() tail = today.formatted("%d.%m.%Y.%H:%M") if replace: sos.rename(plan_file_name, "%s-%s" % (plan_file_name, tail)) else: plan_file_name = "%s.%s" % (plan_file_name, tail) CAL.write_year(Y.as_plan, plan_file_name, force=replace)
def write_plan (Y, plan_file_name, replace = False) : today = CAL.Date_Time () tail = today.formatted ("%d.%m.%Y.%H:%M") if replace : sos.rename (plan_file_name, "%s-%s" % (plan_file_name, tail)) else : plan_file_name = "%s.%s" % (plan_file_name, tail) CAL.write_year (Y.as_plan, plan_file_name, force = replace)
def close(self): if self.name != self.sync_dir.file_name: assert self.backup_name if sos.path.isdir(self.backup_name): sos.rmdir(self.backup_name, deletefiles=1) sos.rename(self.sync_dir.file_name, self.backup_name) sos.rename(self.name, self.sync_dir.file_name) self.name = self.sync_dir.file_name self.__Ancestor.close(self)
def close (self) : if self.name != self.sync_dir.file_name : assert self.backup_name if sos.path.isdir (self.backup_name) : sos.rmdir (self.backup_name, deletefiles = 1) sos.rename (self.sync_dir.file_name, self.backup_name) sos.rename (self.name, self.sync_dir.file_name) self.name = self.sync_dir.file_name self.__Ancestor.close (self)
def rename(self, new_name, dir, file): ### XXX if file: ### rename the file file_name = self.abs_path(file) root_dir = file_name[:-len(file.path)] new_name = os.path.join(os.path.dirname(file_name), new_name) os.rename(file_name, new_name) file.set_raw(path=new_name[len(root_dir):]) return self.file_entry(dir, file) else: ### rename the tag dir.set_raw(name=new_name) return self.directory_entry(dir)
def rename (self, new_name, dir, file) : ### XXX if file : ### rename the file file_name = self.abs_path (file) root_dir = file_name [:-len (file.path)] new_name = os.path.join (os.path.dirname (file_name), new_name) os.rename (file_name, new_name) file.set_raw (path = new_name [len (root_dir):]) return self.file_entry (dir, file) else : ### rename the tag dir.set_raw (name = new_name) return self.directory_entry (dir)
def _main(cmd): """For each argument, write sanitized_filename to stdout. If `-rename` is specified, the files are renamed to the sanitized_filenames instead. """ from _TFL import sos from _TFL.pyk import pyk for f in cmd.argv: sf = sanitized_filename(pyk.decoded(f)) if cmd.rename: sos.rename(f, sf) if cmd.verbose: pyk.fprint("Renamed", f, "to", sf) else: pyk.fprint(sf, end=" ")
def recode_file(name, input_encoding, output_encoding, backup=None, verbose=False): with open(name, "rb") as f: source = f.read() coding_rep = r"\g<head>%s\g<tail>" % output_encoding if coding_pat.search(source): input_encoding = coding_pat.encoding text = source.decode(input_encoding) if coding_pat.last_match: text = coding_pat.sub(coding_rep, text, 1) target = text.encode(output_encoding) if backup: sos.rename(name, name + backup) with open(name, "w+b") as f: f.write(target) if verbose: print("Converted %s from %s to %s" % (name, input_encoding, output_encoding))
def _main(cmd): """For each argument, write sanitized_filename to stdout. If `-rename` is specified, the files are renamed to the sanitized_filenames instead. """ from _TFL import sos from _TFL.pyk import pyk for f_b in cmd.argv: f = pyk.decoded(f_b) sf = sanitized_filename(f) sf_b = pyk.encoded(sf) if cmd.rename: if f_b != sf_b and sos.path.exists(f_b): sos.rename(f_b, sf_b) if cmd.verbose: print("Renamed", f, "to", sf) else: print(sf, end=cmd.separator)
def _main (cmd) : """For each argument, write sanitized_filename to stdout. If `-rename` is specified, the files are renamed to the sanitized_filenames instead. """ from _TFL import sos from _TFL.pyk import pyk for f_b in cmd.argv : f = pyk.decoded (f_b) sf = sanitized_filename (f) sf_b = pyk.encoded (sf) if cmd.rename : if f_b != sf_b and sos.path.exists (f_b) : sos.rename (f_b, sf_b) if cmd.verbose : pyk.fprint ("Renamed", f, "to", sf) else : pyk.fprint (sf, end = cmd.separator)
def _get_key_save (self) : ### get current key of file ### to make it save, rename the file first and read key afterwards tmp_name = sos.tempfile_name \ (Filename (self.file_name).directory or sos.curdir) curr_key = "" try : sos.rename (self.file_name, tmp_name) curr_key = self._get_key (tmp_name) except sos.error as exc : if exc.args [0] != errno.ENOENT : raise tmp_name = None except (SystemExit, KeyboardInterrupt, IOError) as exc : raise except : pass return curr_key, tmp_name
def _get_key_save(self): ### get current key of file ### to make it save, rename the file first and read key afterwards tmp_name = sos.tempfile_name \ (Filename (self.file_name).directory or sos.curdir) curr_key = "" try: sos.rename(self.file_name, tmp_name) curr_key = self._get_key(tmp_name) except sos.error as exc: if exc.args[0] != errno.ENOENT: raise tmp_name = None except (SystemExit, KeyboardInterrupt, IOError) as exc: raise except: pass return curr_key, tmp_name
def recode_file \ (name, input_encoding, output_encoding, backup = None, verbose = False): with open (name, "rb") as f : source = f.read () coding_rep = r"\g<head>%s\g<tail>" % output_encoding if coding_pat.search (source) : input_encoding = coding_pat.encoding text = source.decode (input_encoding) if coding_pat.last_match : text = coding_pat.sub (coding_rep, text, 1) target = text.encode (output_encoding) if backup : sos.rename (name, name + backup) with open (name, "w+b") as f : f.write (target) if verbose : print \ ( "Converted %s from %s to %s" % (name, input_encoding, output_encoding) )
def open_to_replace (file_name, mode = "w", buffering = -1, backup_name = None) : """Context manager that opens a file with a temporary name and renames it to `file_name` after syncing and closing. If `backup_name` is specified, the old file is renamed to `backup_name`. """ dir, name = sos.path.split (file_name) with open_tempfile (mode, buffering, prefix = name, dir = dir) as \ (file, temp_name) : yield file file.flush () sos.fsync (file.fileno ()) file.close () if backup_name : try : sos.rename (file_name, backup_name) except sos.error as exc : if exc.args [0] != errno.ENOENT : import traceback traceback.print_exc () sos.rename (temp_name, file_name)
def open_to_replace(file_name, mode="w", buffering=-1, backup_name=None): """Context manager that opens a file with a temporary name and renames it to `file_name` after syncing and closing. If `backup_name` is specified, the old file is renamed to `backup_name`. """ dir, name = sos.path.split(file_name) with open_tempfile (mode, buffering, prefix = name, dir = dir) as \ (file, temp_name) : yield file file.flush() sos.fsync(file.fileno()) file.close() if backup_name: try: sos.rename(file_name, backup_name) except sos.error as exc: if exc.args[0] != errno.ENOENT: import traceback traceback.print_exc() sos.rename(temp_name, file_name)