From b6c6fc9aa9f9c8e0aa503cc7b06792dfb5de8bc0 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Sun, 7 Apr 2019 22:44:15 -0700 Subject: [PATCH] Find paths case-insensitively --- .bin/Scripts/functions/ufd.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/.bin/Scripts/functions/ufd.py b/.bin/Scripts/functions/ufd.py index 441b4770..9aeb1b3d 100644 --- a/.bin/Scripts/functions/ufd.py +++ b/.bin/Scripts/functions/ufd.py @@ -4,6 +4,33 @@ import pathlib from functions.common import * +def case_insensitive_search(path, item): + """Search path for item case insensitively, returns str.""" + if os.path.exists('{}/{}'.format(path, item)): + # Easy mode + return '{}/{}'.format(path, item) + + # Check all items in dir + for entry in os.scandir(path): + if re.match(entry.name, item, re.IGNORECASE): + return '{}/{}'.format(path, entry.name) + + # If we get here the item wasn't found + raise FileNotFoundError('{}/{}'.format(path, item)) + + +def find_source_item(source_dir, item): + """Find item relative to source dir, returns str.""" + path = source_dir + if item.startswith('/'): + item = item[1:] + + for part in item.split('/'): + path = case_insensitive_search(path, part) + + return path + + def get_full_path(item): """Get full path to item, returns pathlib.Path obj.""" path_obj = pathlib.Path(item).resolve()