+#----------------------------------------------------------------------------
+# Name: objutils.py
+# Purpose: Object Utilities
+#
+# Author: Alan Mullendore
+#
+# Created: 5/10/05
+# CVS-ID: $Id$
+# Copyright: (c) 2004-2005 ActiveGrid, Inc.
+# License: wxWindows License
+#----------------------------------------------------------------------------
+
+import logging
+import traceback
+import sys
+import os
+
+import xmlmarshaller
+
+def defaultLoad(fileObject, knownTypes=None):
+ xml = fileObject.read()
+ loadedObject = xmlmarshaller.unmarshal(xml, knownTypes=knownTypes)
+ if hasattr(fileObject, 'name'):
+ loadedObject.fileName = os.path.abspath(fileObject.name)
+ loadedObject.initialize()
+ return loadedObject
+
+def defaultSave(fileObject, objectToSave, knownTypes=None, withEncoding=1, encoding='utf-8'):
+ xml = xmlmarshaller.marshal(objectToSave, prettyPrint=True, knownTypes=knownTypes, withEncoding=withEncoding, encoding=encoding)
+ fileObject.write(xml)
+ fileObject.flush()
+
+def clone(objectToClone, knownTypes=None, encoding='utf-8'):
+ xml = xmlmarshaller.marshal(objectToClone, prettyPrint=True, knownTypes=knownTypes, encoding=encoding)
+ clonedObject = xmlmarshaller.unmarshal(xml, knownTypes=knownTypes)
+ if hasattr(objectToClone, 'fileName'):
+ clonedObject.fileName = objectToClone.fileName
+ try:
+ clonedObject.initialize()
+ except AttributeError:
+ pass
+ return clonedObject
+
+def classForName(className):
+ pathList = className.split('.')
+ moduleName = '.'.join(pathList[:-1])
+ code = __import__(moduleName)
+ for name in pathList[1:]:
+ code = code.__dict__[name]
+ return code
+
+def hasattrignorecase(object, name):
+ namelow = name.lower()
+ for attr in dir(object):
+ if attr.lower() == namelow:
+ return True
+ for attr in dir(object):
+ if attr.lower() == '_' + namelow:
+ return True
+ return False
+
+def setattrignorecase(object, name, value):
+ namelow = name.lower()
+ for attr in object.__dict__:
+ if attr.lower() == namelow:
+ object.__dict__[attr] = value
+ return
+ object.__dict__[name] = value
+
+def getattrignorecase(object, name):
+ namelow = name.lower()
+ for attr in object.__dict__:
+ if attr.lower() == namelow:
+ return object.__dict__[attr]
+ return object.__dict__[name]
+
+def hasPropertyValue(obj, attr):
+ hasProp = False
+ try:
+ prop = obj.__class__.__dict__[attr]
+ if (isinstance(prop, property)):
+ hasProp = hasattr(obj, attr)
+ if (hasProp):
+ # It's a property and it has a value but sometimes we don't want it.
+ # If there is a _hasattr method execute it and the
+ # result will tell us whether to include this value
+ try:
+ hasProp = obj._hasattr(attr)
+ except:
+ pass
+ except KeyError:
+ pass
+ return hasProp