diff --git a/overviewer_core/configParser.py b/overviewer_core/configParser.py index 5e792bb..fe2bbfd 100644 --- a/overviewer_core/configParser.py +++ b/overviewer_core/configParser.py @@ -253,20 +253,19 @@ class MultiWorldParser(object): for key in settingsDefinition.render: option = settingsDefinition.render[key] if option.has_key("default"): - self.defaults[key] = option.get("default") + self.defaults[key] = option["default"] + self.defaults.update(glob) - - import pprint - pprint.pprint(glob, indent=2) def validate(self): for worldname in self.render: - world = self.render[worldname] + world = dict() world.update(self.defaults) + world.update(self.render[worldname]) for key in world: if key not in settingsDefinition.render: @@ -278,8 +277,9 @@ class MultiWorldParser(object): val = definition['validator'](world[key]) world[key] = val except Exception as e: - print "Error: %r" % e - next + #print "Error validating %s: %r" % (key, e) + raise e + self.render[worldname] = world diff --git a/overviewer_core/settingsValidators.py b/overviewer_core/settingsValidators.py index 3398e31..1fcf8ca 100644 --- a/overviewer_core/settingsValidators.py +++ b/overviewer_core/settingsValidators.py @@ -62,15 +62,22 @@ def validateBGColor(color): """BG color must be an HTML color, with an option leading # (hash symbol) returns an (r,b,g) 3-tuple """ - if color[0] != "#": - color = "#%s" % color - if len(color) != 7: - raise ValidationException("%r is not a valid color. Expected HTML color syntax (i.e. #RRGGBB)" % color) - - r = int(color[1:3], 16) - g = int(color[3:5], 16) - b = int(color[5:7], 16) - return (r,g,b,0) + if type(color) == str: + if color[0] != "#": + color = "#" + color + if len(color) != 7: + raise ValidationException("%r is not a valid color. Expected HTML color syntax (i.e. #RRGGBB)" % color) + try: + r = int(color[1:3], 16) + g = int(color[3:5], 16) + b = int(color[5:7], 16) + return (r,g,b,0) + except ValueError: + raise ValidationException("%r is not a valid color. Expected HTML color syntax (i.e. #RRGGBB)" % color) + elif type(color) == tuple: + if len(color) != 4: + raise ValidationException("%r is not a valid color. Expected a 4-tuple" % (color,)) + return color def validateOptImg(opt): diff --git a/test/data/settings/settings_test_1.py b/test/data/settings/settings_test_1.py index fe1f3f6..370e3d6 100644 --- a/test/data/settings/settings_test_1.py +++ b/test/data/settings/settings_test_1.py @@ -7,5 +7,6 @@ render["world"] = { } render["otherworld"] = { - "rendermode": "foo" + "rendermode": "foo", + "bgcolor": "#ffffff" } diff --git a/test/data/settings/settings_test_bgcolor.py b/test/data/settings/settings_test_bgcolor.py new file mode 100644 index 0000000..a14d5bc --- /dev/null +++ b/test/data/settings/settings_test_bgcolor.py @@ -0,0 +1,6 @@ +bgcolor="#000000" + +render["world"] = { + "worldpath": "test/data/settings/test_world", + "bgcolor":"ffff" +} diff --git a/test/test_settings.py b/test/test_settings.py index c4010cf..15f39ec 100644 --- a/test/test_settings.py +++ b/test/test_settings.py @@ -15,6 +15,7 @@ class SettingsTest(unittest.TestCase): things = s.get_render_things() # no exceptions so far. that's good self.assertEquals(things['world']['bgcolor'], (26,26,26,0)) + self.assertEquals(things['otherworld']['bgcolor'], (255,255,255,0)) def test_rendermode_validation(self): s = configParser.MultiWorldParser("test/data/settings/settings_test_rendermode.py") @@ -22,5 +23,12 @@ class SettingsTest(unittest.TestCase): self.assertRaises(ValidationException,s.validate) + def test_bgcolor_validation(self): + s = configParser.MultiWorldParser("test/data/settings/settings_test_bgcolor.py") + s.parse() + + self.assertRaises(ValidationException, s.validate) + + if __name__ == "__main__": unittest.main()