image_load() utility function's 'recursive' option wasn't functional since 2.4x

This commit is contained in:
Campbell Barton 2013-08-12 07:48:31 +00:00
parent 98e5e544b5
commit 1c5b416cbf

@ -66,8 +66,6 @@ def load_image(imagepath,
import os
import bpy
# TODO: recursive
# -------------------------------------------------------------------------
# Utility Functions
@ -111,6 +109,18 @@ def load_image(imagepath,
return image
def _recursive_search(paths, filename_check):
for path in paths:
for dirpath, dirnames, filenames in os.walk(path):
# skip '.svn'
if dirpath[0] in {".", b'.'}:
continue
for filename in filenames:
if filename_check(filename):
yield os.path.join(dirpath, filename)
# -------------------------------------------------------------------------
if verbose:
@ -138,6 +148,28 @@ def load_image(imagepath,
if os.path.exists(nfilepath):
return _image_load(nfilepath)
if recursive:
search_paths = []
for dirpath_test in (os.path.dirname(imagepath), dirname):
if os.path.exists(dirpath_test):
search_paths.append(dirpath_test)
search_paths[:] = bpy.path.reduce_dirs(search_paths)
imagepath_base = bpy.path.basename(imagepath)
if ncase_cmp:
imagepath_base = imagepath_base.lower()
def image_filter(fn):
return (imagepath_base == fn.lower())
else:
def image_filter(fn):
return (imagepath_base == fn)
nfilepath = next(_recursive_search(search_paths, image_filter), None)
if nfilepath is not None:
return _image_load(nfilepath)
# None of the paths exist so return placeholder
if place_holder:
return _image_load_placeholder(imagepath)