ActiveGrid folks. Their sample IDE is now able to integrate with Subversion. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34158 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
94 lines
3.0 KiB
Python
94 lines
3.0 KiB
Python
#----------------------------------------------------------------------------
|
|
# 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
|