]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/samples/ide/activegrid/util/objutils.py
More updates to the docview library modules and sample apps from the
[wxWidgets.git] / wxPython / samples / ide / activegrid / util / objutils.py
diff --git a/wxPython/samples/ide/activegrid/util/objutils.py b/wxPython/samples/ide/activegrid/util/objutils.py
new file mode 100644 (file)
index 0000000..3b2935f
--- /dev/null
@@ -0,0 +1,93 @@
+#----------------------------------------------------------------------------
+# 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