0

Part of an attempt to make config parser a little more generic

This commit is contained in:
Andrew Chin
2012-01-28 18:56:40 -05:00
parent 42d1b5049f
commit 2497a8a806
3 changed files with 61 additions and 34 deletions

View File

@@ -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):

View File

@@ -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

View File

@@ -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)