diff --git a/overviewer_core/configParser.py b/overviewer_core/configParser.py index a048830..84cba6e 100644 --- a/overviewer_core/configParser.py +++ b/overviewer_core/configParser.py @@ -221,7 +221,15 @@ class MultiWorldParser(object): self.settings_file = settings def parse(self): - glob = dict(render=dict(), custom_rendermodes=dict(), world=dict()) + # settingsDefinition.py defines what types of things you can put in a configfile + # anything in settingsDefinitino that is a dict with a "type" key is a definiton + defDicts = [x for x in dir(settingsDefinition) if type(getattr(settingsDefinition,x)) == dict and getattr(settingsDefinition,x).has_key("type") and x != "__builtins__"] + + glob = dict() + for name in defDicts: + d = getattr(settingsDefinition, name) + glob[name] = d['type']() + import rendermodes loc=dict() for thing in dir(rendermodes): @@ -247,21 +255,21 @@ class MultiWorldParser(object): logging.error("Error parsing %s. Please check the trackback above" % self.settings_file) sys.exit(1) - self.render = glob['render'] - self.custom_rendermodes = glob['custom_rendermodes'] - self.world = glob['world'] - # anything that's not 'render' or 'custom_rendermode' is a default - del glob['render'] - del glob['custom_rendermodes'] - del glob['world'] + for name in defDicts: + setattr(self, name, glob[name]) + del glob[name] + # seed with the Overviewer defaults, then update with the user defaults self.defaults = dict() - for key in settingsDefinition.render: - option = settingsDefinition.render[key] - if option.has_key("default"): - self.defaults[key] = option["default"] + for name in defDicts: + d = getattr(settingsDefinition, name) + if d['type'] == dict and d['valuetype'] == dict: + for key in d['values']: + option = d['values'][key] + if option.has_key("default"): + self.defaults[key] = option["default"] self.defaults.update(glob) @@ -278,11 +286,11 @@ class MultiWorldParser(object): world.update(self.render[worldname]) for key in world: - if key not in settingsDefinition.render: - print "Warning: %r is not a known setting" % key + if key not in settingsDefinition.render['values']: + logging.warning("%r is not a known setting", key) continue - definition = settingsDefinition.render[key] + definition = settingsDefinition.render['values'][key] try: val = definition['validator'](world[key], world = self.world) if definition.get('save_orig', False): diff --git a/overviewer_core/settingsDefinition.py b/overviewer_core/settingsDefinition.py index 7cbd65f..3a44c63 100644 --- a/overviewer_core/settingsDefinition.py +++ b/overviewer_core/settingsDefinition.py @@ -13,25 +13,42 @@ from settingsValidators import * - # note that all defaults go thought the validator - render = { - "worldname": dict(required=True, validator=validateWorldPath, save_orig=True), - "dimension": dict(required=False, validator=validateDimension, default="default"), - "title": dict(required=True, validator=validateStr), - "rendermode": dict(required=False, validator=validateRenderMode), - "northdirection": dict(required=False, validator=validateNorthDirection, default=0), - "renderrange": dict(required=False, validator=validateRenderRange), - "forcerender": dict(required=False, validator=validateBool), - "stochasticrender": dict(required=False, validator=validateStochastic), - "imgformat": dict(required=False, validator=validateImgFormat, default="png"), - "imgquality": dict(required=False, validator=validateImgQuality), - "bgcolor": dict(required=False, validator=validateBGColor, default="1a1a1a"), - "optimizeimg": dict(required=False, validator=validateOptImg, default=0), - "nomarkers": dict(required=False, validator=validateBool), - "texturepath": dict(required=False, validator=validateTexturePath), - "renderchecks": dict(required=False, validator=validateInt, default=0), - "rerenderprob": dict(required=False, validator=validateFloat, default=0), - } + "type": dict, + "valuetype": dict, + "values": { + "worldname": dict(required=True, validator=validateWorldPath, save_orig=True), + "dimension": dict(required=False, validator=validateDimension, default="default"), + "title": dict(required=True, validator=validateStr), + "rendermode": dict(required=False, validator=validateRenderMode), + "northdirection": dict(required=False, validator=validateNorthDirection, default=0), + "renderrange": dict(required=False, validator=validateRenderRange), + "forcerender": dict(required=False, validator=validateBool), + "stochasticrender": dict(required=False, validator=validateStochastic), + "imgformat": dict(required=False, validator=validateImgFormat, default="png"), + "imgquality": dict(required=False, validator=validateImgQuality), + "bgcolor": dict(required=False, validator=validateBGColor, default="1a1a1a"), + "optimizeimg": dict(required=False, validator=validateOptImg, default=0), + "nomarkers": dict(required=False, validator=validateBool), + "texturepath": dict(required=False, validator=validateTexturePath), + "renderchecks": dict(required=False, validator=validateInt, default=0), + "rerenderprob": dict(required=False, validator=validateFloat, default=0), + } + } + +world = { + "type": dict, + "valuetype": str, + "value": dict(validator=validateStr) +} + +outputdir = { + "type": str, + "value": dict(validator=validateOutputDir) +} + +#defines the values for each member of the world dict +#world = dict(require + diff --git a/overviewer_core/settingsValidators.py b/overviewer_core/settingsValidators.py index f423e4f..4d9d3a2 100644 --- a/overviewer_core/settingsValidators.py +++ b/overviewer_core/settingsValidators.py @@ -111,3 +111,5 @@ def validateDimension(d, **kwargs): return d raise ValidationException("%r is not a valid dimension" % d) +def validateOutputDir(d, **kwargs): + return os.path.abs(d)