--- /dev/null
+import logging
+import cStringIO
+import traceback
+import sys
+import string
+import os
+
+def classForName(className):
+ pathList = className.split('.')
+ moduleName = string.join(pathList[:-1], '.')
+ code = __import__(moduleName)
+ for name in pathList[1:]:
+ code = code.__dict__[name]
+ return code
+
+def hasattrignorecase(object, name):
+ for attr in dir(object):
+ if attr.lower() == name.lower():
+ return True
+ for attr in dir(object):
+ if attr.lower() == '_' + name.lower():
+ return True
+ return False
+
+
+def setattrignorecase(object, name, value):
+ for attr in object.__dict__:
+ if attr.lower() == name.lower():
+ object.__dict__[attr] = value
+ return
+## for attr in dir(object):
+## if attr.lower() == '_' + name.lower():
+## object.__dict__[attr] = value
+## return
+ object.__dict__[name] = value
+
+def getattrignorecase(object, name):
+ for attr in object.__dict__:
+ if attr.lower() == name.lower():
+ return object.__dict__[attr]
+## for attr in dir(object):
+## if attr.lower() == '_' + name.lower():
+## return object.__dict__[attr]
+ return object.__dict__[name]
+
+
+def defaultLoad(fileObject):
+ xml = fileObject.read()
+ loadedObject = xmlmarshaller.unmarshal(xml)
+ if hasattr(fileObject, 'name'):
+ loadedObject.fileName = os.path.abspath(fileObject.name)
+ loadedObject.initialize()
+ return loadedObject
+
+def defaultSave(fileObject, objectToSave):
+ xml = xmlmarshaller.marshal(objectToSave, prettyPrint=True)
+ fileObject.write(xml)
+
+
+def clone(objectToClone):
+ xml = xmlmarshaller.marshal(objectToClone, prettyPrint=True)
+ clonedObject = xmlmarshaller.unmarshal(xml)
+ if hasattr(objectToClone, 'fileName'):
+ clonedObject.fileName = objectToClone.fileName
+ clonedObject.initialize()
+ return clonedObject
+
+def exceptionToString(e):
+ sio = cStringIO.StringIO()
+ traceback.print_exception(e.__class__, e, sys.exc_traceback, file=sio)
+ return sio.getvalue()
+