aboutsummaryrefslogtreecommitdiff
path: root/util/Config.py
diff options
context:
space:
mode:
authorGravatar rcoh <rcoh@mit.edu>2010-12-25 14:07:18 -0500
committerGravatar rcoh <rcoh@mit.edu>2010-12-25 14:07:18 -0500
commit1b84f44faacfe83d4f3603b4df913ed01bf79d09 (patch)
tree5c8af28f71d44d6fb234e3c9f4b9b1f2a2be0006 /util/Config.py
parent2113f5363022e4ccb2b14d0a7ebd6765de820411 (diff)
parent9e1e0f0c0b6835cc3755bbaa6a364475133ce848 (diff)
Merge branch 'master' into configimprovements
Conflicts: util/Strings.py
Diffstat (limited to 'util/Config.py')
-rw-r--r--util/Config.py34
1 files changed, 32 insertions, 2 deletions
diff --git a/util/Config.py b/util/Config.py
index 746350d..0349e3e 100644
--- a/util/Config.py
+++ b/util/Config.py
@@ -1,4 +1,5 @@
from xml.etree.ElementTree import ElementTree
+import util.Strings as Strings
classArgsMem = {}
CONFIG_PATH = 'config/'
def loadParamRequirementDict(className):
@@ -6,7 +7,7 @@ def loadParamRequirementDict(className):
classArgsMem[className] = fileToDict(CONFIG_PATH + className)
return classArgsMem[className]
def loadConfigFile(fileName): #TODO: error handling etc.
- try:
+ #try:
fileName = CONFIG_PATH + fileName
if '.params' in fileName:
return fileToDict(fileName)
@@ -14,8 +15,37 @@ def loadConfigFile(fileName): #TODO: error handling etc.
config = ElementTree() #use .fromstring, and resolve xincludes
config.parse(fileName)
return config
- except:
+ #except:
return None
+def compositeXMLTrees(parentTree, overridingTree):
+ #type checking -- convert ElementTrees to their root elements
+ parentItems = parentTree.getchildren()
+ overrideItems = overridingTree.getchildren()
+ #first, lets figure out what tags we have in the override tree:
+ tagCollection = [el.tag for el in overrideItems] #we can speed this up with a dict if necessary
+ overrideRoot = overridingTree.getroot()
+ for item in parentItems:
+ if not item.tag in tagCollection: #no override
+ overrideRoot.insert(-1, item) #insert the new item at the end
+ else:
+ #do we merge or replace?
+ intersectingElements = findElementsByTag(item.tag, overrideItems)
+ if len(intersectingItems) > 1:
+ print 'ABUSE!'
+ interEl = intersectingElements[0]
+ mode = 'Replace'
+ if Strings.OVERRIDE_BEHAVIOR in interEl.attrib:
+ mode = interEl.attrib[Strings.OVERRIDE_BEHAVIOR]
+ if mode != 'Replace' and mode != 'Merge':
+ print 'Bad Mode. Replacing'
+ mode = 'Replace'
+ if mode == 'Replace':
+ pass #we don't need to do anything
+ if mode == 'Merge':
+ pass #TODO: code this
+
+def findElementsByTag(tag, eList):
+ return [el for el in eList if el.tag == tag]
def fileToDict(fileName):
fileText = ''
try: