Find paths case-insensitively
This commit is contained in:
parent
cd0a9456cb
commit
b6c6fc9aa9
1 changed files with 27 additions and 0 deletions
|
|
@ -4,6 +4,33 @@ import pathlib
|
||||||
from functions.common import *
|
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):
|
def get_full_path(item):
|
||||||
"""Get full path to item, returns pathlib.Path obj."""
|
"""Get full path to item, returns pathlib.Path obj."""
|
||||||
path_obj = pathlib.Path(item).resolve()
|
path_obj = pathlib.Path(item).resolve()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue