From 7a9971304384d2434d95a3d41ecd9ed5b0d21cef Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Sun, 15 Sep 2019 16:28:47 -0700 Subject: [PATCH] Added non_clobbering_path() --- scripts/wk/io.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/scripts/wk/io.py b/scripts/wk/io.py index 469408c3..d991be4a 100644 --- a/scripts/wk/io.py +++ b/scripts/wk/io.py @@ -1,6 +1,35 @@ '''WizardKit: I/O Functions''' # vim: sts=2 sw=2 ts=2 +import pathlib + + +# Functions +def non_clobbering_path(path): + """Update path as needed to non-existing path, returns pathlib.Path.""" + path = pathlib.Path(path) + name = path.name + new_path = None + suffix = ''.join(path.suffixes) + name = name.replace(suffix, '') + + # Bail early + if not path.exists(): + return path + + # Find non-existant path + for _i in range(1000): + new_path = path.with_name(f'{name}_{_i}').with_suffix(suffix) + if not new_path.exists(): + break + + # Raise error if viable path not found + if not new_path: + raise FileExistsError(new_path) + + # Done + return new_path + if __name__ == '__main__': print("This file is not meant to be called directly.")