Refactor toward supporting multiple test data resolver types.

This commit is contained in:
John Chilton
2015-02-09 21:43:42 -05:00
parent da67d35e60
commit 7b5e5c6eec
+29 -15
View File
@@ -9,24 +9,38 @@ class TestDataResolver(object):
def __init__(self, env_var, environ=os.environ):
file_dirs = environ.get(env_var, None)
if file_dirs:
self.file_dirs = LIST_SEP.split(file_dirs)
self.resolvers = map(FileDataResolver, LIST_SEP.split(file_dirs))
else:
self.file_dirs = []
self.resolvers = []
def get_filename(self, name):
if not self.file_dirs:
if not self.resolvers:
filename = None
else:
filename = os.path.join(self.file_dirs[0], name)
# For backward compat. returning first path if none
# exist - though I don't know if this function is ever
# actually used in a context where one should return
# a file even if it doesn't exist (e.g. a prefix or
# or something) - I am pretty sure it is not used in
# such a fashion in the context of tool tests.
if not os.path.exists(filename):
for file_dir in self.file_dirs[1:]:
query_filename = os.path.join(file_dir, name)
if os.path.exists(query_filename):
filename = query_filename
resolver = self.resolvers[0]
filename = resolver.path(name)
if not resolver.exists(filename):
for resolver in self.resolvers[1:]:
if resolver.exists(name):
filename = resolver.path(name)
else:
# For backward compat. returning first path if none
# exist - though I don't know if this function is ever
# actually used in a context where one should return
# a file even if it doesn't exist (e.g. a prefix or
# or something) - I am pretty sure it is not used in
# such a fashion in the context of tool tests.
filename = resolver.path(name)
return os.path.abspath(filename)
class FileDataResolver(object):
def __init__(self, file_dir):
self.file_dir = file_dir
def exists(self, filename):
return os.path.exists(self.path(filename))
def path(self, filename):
return os.path.join(self.file_dir, filename)