Part of an attempt to make config parser a little more generic
This commit is contained in:
@@ -221,7 +221,15 @@ class MultiWorldParser(object):
|
|||||||
self.settings_file = settings
|
self.settings_file = settings
|
||||||
|
|
||||||
def parse(self):
|
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
|
import rendermodes
|
||||||
loc=dict()
|
loc=dict()
|
||||||
for thing in dir(rendermodes):
|
for thing in dir(rendermodes):
|
||||||
@@ -247,19 +255,19 @@ class MultiWorldParser(object):
|
|||||||
logging.error("Error parsing %s. Please check the trackback above" % self.settings_file)
|
logging.error("Error parsing %s. Please check the trackback above" % self.settings_file)
|
||||||
sys.exit(1)
|
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
|
for name in defDicts:
|
||||||
del glob['render']
|
setattr(self, name, glob[name])
|
||||||
del glob['custom_rendermodes']
|
del glob[name]
|
||||||
del glob['world']
|
|
||||||
|
|
||||||
# seed with the Overviewer defaults, then update with the user defaults
|
# seed with the Overviewer defaults, then update with the user defaults
|
||||||
self.defaults = dict()
|
self.defaults = dict()
|
||||||
for key in settingsDefinition.render:
|
for name in defDicts:
|
||||||
option = settingsDefinition.render[key]
|
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"):
|
if option.has_key("default"):
|
||||||
self.defaults[key] = option["default"]
|
self.defaults[key] = option["default"]
|
||||||
|
|
||||||
@@ -278,11 +286,11 @@ class MultiWorldParser(object):
|
|||||||
world.update(self.render[worldname])
|
world.update(self.render[worldname])
|
||||||
|
|
||||||
for key in world:
|
for key in world:
|
||||||
if key not in settingsDefinition.render:
|
if key not in settingsDefinition.render['values']:
|
||||||
print "Warning: %r is not a known setting" % key
|
logging.warning("%r is not a known setting", key)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
definition = settingsDefinition.render[key]
|
definition = settingsDefinition.render['values'][key]
|
||||||
try:
|
try:
|
||||||
val = definition['validator'](world[key], world = self.world)
|
val = definition['validator'](world[key], world = self.world)
|
||||||
if definition.get('save_orig', False):
|
if definition.get('save_orig', False):
|
||||||
|
|||||||
@@ -13,10 +13,11 @@
|
|||||||
|
|
||||||
from settingsValidators import *
|
from settingsValidators import *
|
||||||
|
|
||||||
|
|
||||||
# note that all defaults go thought the validator
|
# note that all defaults go thought the validator
|
||||||
|
|
||||||
render = {
|
render = {
|
||||||
|
"type": dict,
|
||||||
|
"valuetype": dict,
|
||||||
|
"values": {
|
||||||
"worldname": dict(required=True, validator=validateWorldPath, save_orig=True),
|
"worldname": dict(required=True, validator=validateWorldPath, save_orig=True),
|
||||||
"dimension": dict(required=False, validator=validateDimension, default="default"),
|
"dimension": dict(required=False, validator=validateDimension, default="default"),
|
||||||
"title": dict(required=True, validator=validateStr),
|
"title": dict(required=True, validator=validateStr),
|
||||||
@@ -34,4 +35,20 @@ render = {
|
|||||||
"renderchecks": dict(required=False, validator=validateInt, default=0),
|
"renderchecks": dict(required=False, validator=validateInt, default=0),
|
||||||
"rerenderprob": dict(required=False, validator=validateFloat, 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
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -111,3 +111,5 @@ def validateDimension(d, **kwargs):
|
|||||||
return d
|
return d
|
||||||
raise ValidationException("%r is not a valid dimension" % d)
|
raise ValidationException("%r is not a valid dimension" % d)
|
||||||
|
|
||||||
|
def validateOutputDir(d, **kwargs):
|
||||||
|
return os.path.abs(d)
|
||||||
|
|||||||
Reference in New Issue
Block a user