From d9b3ecc236db2554482a88bc9502d95d983c6765 Mon Sep 17 00:00:00 2001 From: fuzzyman Date: Sun, 22 Nov 2009 00:26:51 +0000 Subject: Fixed problem with missing sections and preserve_errors with validation. --- configobj.py | 30 ++++++++++++++++-------------- test_configobj.py | 27 ++++++++++++++------------- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/configobj.py b/configobj.py index 91f6594..90ad469 100644 --- a/configobj.py +++ b/configobj.py @@ -2245,10 +2245,11 @@ class ConfigObj(Section): ret_true = False section.extra_values = unvalidated - if preserve_errors and section._created: - print 'b00m!' + if preserve_errors and not section._created: ret_false = False # + if ret_false and preserve_errors and out: + ret_false = not any(out.values()) if ret_true: return True elif ret_false: @@ -2394,21 +2395,22 @@ def flatten_errors(cfg, res, levels=None, results=None): >>> for entry in flatten_errors(cfg, res): ... section_list, key, error = entry ... section_list.insert(0, '[root]') - ... section_list.append(key) + ... if key is not None: + ... section_list.append(key) ... section_string = ', '.join(section_list) - ... errors.append((section_string, ' = ', error or 'missing')) + ... errors.append('%s%s%s' % (section_string, ' = ', error or 'missing')) >>> errors.sort() >>> for entry in errors: - ... print entry[0], entry[1], entry[2] - [root], option2 = missing - [root], option3 = the value "Bad_value" is of the wrong type. - [root], section1, option2 = missing - [root], section1, option3 = the value "Bad_value" is of the wrong type. - [root], section2, another_option = the value "Probably" is of the wrong type. - [root], section3, section3b, section3b-sub, value = missing - [root], section3, section3b, value2 = the value "a" is of the wrong type. - [root], section3, section3b, value3 = the value "11" is too big. - [root], section4, another_option = missing + ... print entry + [root], option2 = missing + [root], option3 = the value "Bad_value" is of the wrong type. + [root], section1, option2 = missing + [root], section1, option3 = the value "Bad_value" is of the wrong type. + [root], section2, another_option = the value "Probably" is of the wrong type. + [root], section3, section3b, section3b-sub = missing + [root], section3, section3b, value2 = the value "a" is of the wrong type. + [root], section3, section3b, value3 = the value "11" is too big. + [root], section4 = missing """ if levels is None: # first time called diff --git a/test_configobj.py b/test_configobj.py index dbdc712..7331aa8 100644 --- a/test_configobj.py +++ b/test_configobj.py @@ -1535,21 +1535,22 @@ def _test_validate(): >>> for entry in flatten_errors(cfg, res): ... section_list, key, error = entry ... section_list.insert(0, '[root]') - ... section_list.append(key) + ... if key is not None: + ... section_list.append(key) ... section_string = ', '.join(section_list) - ... errors.append((section_string, ' = ', error or 'missing')) + ... errors.append('%s%s%s' % (section_string, ' = ', error or 'missing')) >>> errors.sort() >>> for entry in errors: - ... print entry[0], entry[1], entry[2] - [root], option2 = missing - [root], option3 = the value "Bad_value" is of the wrong type. - [root], section1, option2 = missing - [root], section1, option3 = the value "Bad_value" is of the wrong type. - [root], section2, another_option = the value "Probably" is of the wrong type. - [root], section3, section3b, section3b-sub, value = missing - [root], section3, section3b, value2 = the value "a" is of the wrong type. - [root], section3, section3b, value3 = the value "11" is too big. - [root], section4, another_option = missing + ... print entry + [root], option2 = missing + [root], option3 = the value "Bad_value" is of the wrong type. + [root], section1, option2 = missing + [root], section1, option3 = the value "Bad_value" is of the wrong type. + [root], section2, another_option = the value "Probably" is of the wrong type. + [root], section3, section3b, section3b-sub = missing + [root], section3, section3b, value2 = the value "a" is of the wrong type. + [root], section3, section3b, value3 = the value "11" is too big. + [root], section4 = missing """ @@ -2110,7 +2111,7 @@ def _test_validation_with_preserve_errors(): >>> spec = ['[section]', 'foo = integer'] >>> c = ConfigObj(configspec=spec) >>> c.validate(v, preserve_errors=True) - False + {'section': False} >>> c = ConfigObj(['[section]'], configspec=spec) >>> c.validate(v) False -- cgit v1.2.1