summaryrefslogtreecommitdiffstats
path: root/pym/portage/env
diff options
context:
space:
mode:
authorMarius Mauch <genone@gentoo.org>2007-09-07 12:30:00 +0000
committerMarius Mauch <genone@gentoo.org>2007-09-07 12:30:00 +0000
commitad68fd1894e1905597ec7bc9f40f629b9b2f92a7 (patch)
treed687e2febeaee5c9acc01ebe26f572e6fb12f5b4 /pym/portage/env
parent4191f68053993645c19fc92dc7cdb8662dd4e4a0 (diff)
downloadportage-ad68fd1894e1905597ec7bc9f40f629b9b2f92a7.tar.gz
portage-ad68fd1894e1905597ec7bc9f40f629b9b2f92a7.tar.bz2
portage-ad68fd1894e1905597ec7bc9f40f629b9b2f92a7.zip
Fix incorrect parse check as value lists in KeyListFileLoader might be empty, add support for value validators in relevant Loaders
svn path=/main/trunk/; revision=7757
Diffstat (limited to 'pym/portage/env')
-rw-r--r--pym/portage/env/loaders.py37
1 files changed, 32 insertions, 5 deletions
diff --git a/pym/portage/env/loaders.py b/pym/portage/env/loaders.py
index 7b1da91b7..ba250ecd4 100644
--- a/pym/portage/env/loaders.py
+++ b/pym/portage/env/loaders.py
@@ -196,9 +196,17 @@ class KeyListFileLoader(FileLoader):
{'key':['foo1','foo2','foo3']}
"""
- def __init__(self, filename, validator):
+ def __init__(self, filename, validator=None, valuevalidator=None):
FileLoader.__init__(self, filename, validator)
+ f = valuevalidator
+ if f is None:
+ # if they pass in no validator, just make a fake one
+ # that always returns true
+ def validate(key):
+ return True
+ f = validate
+ self._valueValidate = f
def lineParser(self, line, line_num, data, errors):
line = line.strip()
@@ -207,7 +215,7 @@ class KeyListFileLoader(FileLoader):
if not len(line): # skip empty lines
return
split = line.split()
- if len(split) < 2:
+ if len(split) < 1:
errors.setdefault(self.fname, []).append(
"Malformed data at line: %s, data: %s"
% (line_num + 1, line))
@@ -216,9 +224,14 @@ class KeyListFileLoader(FileLoader):
value = split[1:]
if not self._validate(key):
errors.setdefault(self.fname, []).append(
- "Validation failed at line: %s, data %s"
+ "Key validation failed at line: %s, data %s"
% (line_num + 1, key))
return
+ if not self._valueValidate(value):
+ errors.setdefault(self.fname, []).append(
+ "Value validation failed at line: %s, data %s"
+ % (line_num + 1, value))
+ return
if key in data:
data[key].append(value)
else:
@@ -236,9 +249,18 @@ class KeyValuePairFileLoader(FileLoader):
'foo':'bar'}
"""
- def __init__(self, filename, validator):
+ def __init__(self, filename, validator, valuevalidator=None):
FileLoader.__init__(self, filename, validator)
+ f = valuevalidator
+ if f is None:
+ # if they pass in no validator, just make a fake one
+ # that always returns true
+ def validate(key):
+ return True
+ f = validate
+ self._valueValidate = f
+
def lineParser(self, line, line_num, data, errors):
line = line.strip()
@@ -261,9 +283,14 @@ class KeyValuePairFileLoader(FileLoader):
return
if not self._validate(key):
errors.setdefault(self.fname, []).append(
- "Validation failed at line: %s, data %s"
+ "Key validation failed at line: %s, data %s"
% (line_num + 1, key))
return
+ if not self._valueValidate(value):
+ errors.setdefault(self.fname, []).append(
+ "Value validation failed at line: %s, data %s"
+ % (line_num + 1, value))
+ return
if key in data:
data[key].append(value)
else: