Merged modifications from the 2.6 branch
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36607 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -14,36 +14,192 @@ import logging
 | 
			
		||||
import traceback
 | 
			
		||||
import sys
 | 
			
		||||
import os
 | 
			
		||||
import __builtin__
 | 
			
		||||
import types
 | 
			
		||||
import xml.sax.saxutils as saxutils
 | 
			
		||||
from types import *
 | 
			
		||||
from activegrid.util.lang import *
 | 
			
		||||
 | 
			
		||||
FUNCTION_HAS_ATTR = '_hasAttr'
 | 
			
		||||
FUNCTION_GET_ATTR = '_getAttr'
 | 
			
		||||
FUNCTION_SET_ATTR = '_setAttr'
 | 
			
		||||
FUNCTION_DEL_ATTR = '_delAttr'
 | 
			
		||||
 | 
			
		||||
def hasRawAttr(obj, name):
 | 
			
		||||
    if obj == None:
 | 
			
		||||
        return False
 | 
			
		||||
    if name != FUNCTION_HAS_ATTR and hasattr(obj, FUNCTION_HAS_ATTR):
 | 
			
		||||
        return obj._hasAttr(name)
 | 
			
		||||
    return obj.__dict__.has_key(name)
 | 
			
		||||
    
 | 
			
		||||
def getRawAttr(obj, name):
 | 
			
		||||
    if name != FUNCTION_GET_ATTR and hasattr(obj, FUNCTION_GET_ATTR):
 | 
			
		||||
        return obj._getAttr(name)
 | 
			
		||||
    return obj.__dict__.get(name)
 | 
			
		||||
    
 | 
			
		||||
def setRawAttr(obj, name, value):
 | 
			
		||||
    if name != FUNCTION_SET_ATTR and hasattr(obj, FUNCTION_SET_ATTR):
 | 
			
		||||
        obj._setAttr(name, value)
 | 
			
		||||
    else:
 | 
			
		||||
        obj.__dict__[name] = value
 | 
			
		||||
    
 | 
			
		||||
def delRawAttr(obj, name):
 | 
			
		||||
    if name != FUNCTION_DEL_ATTR and hasattr(obj, FUNCTION_DEL_ATTR):
 | 
			
		||||
        obj._delAttr(name)
 | 
			
		||||
    else:
 | 
			
		||||
        del obj.__dict__[name]
 | 
			
		||||
 | 
			
		||||
def getStaticAttr(obj, attr):
 | 
			
		||||
    if (isinstance(obj, types.TypeType)):
 | 
			
		||||
        classDesc = obj
 | 
			
		||||
    else:
 | 
			
		||||
        classDesc = obj.__class__
 | 
			
		||||
    if (hasattr(classDesc, attr)):
 | 
			
		||||
        return getattr(classDesc, attr)
 | 
			
		||||
    return None
 | 
			
		||||
    
 | 
			
		||||
def setStaticAttr(obj, attr, value):
 | 
			
		||||
    if (isinstance(obj, types.TypeType)):
 | 
			
		||||
        classDesc = obj
 | 
			
		||||
    else:
 | 
			
		||||
        classDesc = obj.__class__
 | 
			
		||||
    setattr(classDesc, attr, value)
 | 
			
		||||
 | 
			
		||||
def moduleForName(moduleName):
 | 
			
		||||
    module = None
 | 
			
		||||
    pathList = moduleName.split('.')
 | 
			
		||||
    if (len(moduleName) > 0):
 | 
			
		||||
        module = __import__(moduleName)
 | 
			
		||||
        for name in pathList[1:]:
 | 
			
		||||
            if (name in module.__dict__):
 | 
			
		||||
                module = module.__dict__[name]
 | 
			
		||||
            else:
 | 
			
		||||
                module = None
 | 
			
		||||
                break
 | 
			
		||||
    return module
 | 
			
		||||
    
 | 
			
		||||
def typeForName(typeName):
 | 
			
		||||
    i = typeName.rfind('.')
 | 
			
		||||
    if (i >= 0):
 | 
			
		||||
        module = moduleForName(typeName[:i])
 | 
			
		||||
        if (module != None):
 | 
			
		||||
            name = typeName[i+1:]
 | 
			
		||||
            if (name in module.__dict__):
 | 
			
		||||
                return module.__dict__[name]
 | 
			
		||||
    elif __builtin__.__dict__.has_key(typeName):
 | 
			
		||||
        return __builtin__.__dict__[typeName]
 | 
			
		||||
    return None
 | 
			
		||||
    
 | 
			
		||||
def functionForName(functionName):
 | 
			
		||||
    ftype = typeForName(functionName)
 | 
			
		||||
    if (isinstance(ftype, (types.FunctionType, types.MethodType, types.BuiltinFunctionType, types.BuiltinMethodType))):
 | 
			
		||||
        return ftype
 | 
			
		||||
    return None
 | 
			
		||||
    
 | 
			
		||||
def classForName(className):
 | 
			
		||||
    pathList = className.split('.')
 | 
			
		||||
    moduleName = '.'.join(pathList[:-1])
 | 
			
		||||
    code = __import__(moduleName)
 | 
			
		||||
    for name in pathList[1:]:
 | 
			
		||||
        code = code.__dict__[name]
 | 
			
		||||
    return code
 | 
			
		||||
    ctype = typeForName(className)
 | 
			
		||||
    if (isinstance(ctype, (types.ClassType, types.TypeType))):
 | 
			
		||||
        return ctype
 | 
			
		||||
    return None
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
def newInstance(className, objargs=None):
 | 
			
		||||
    "dynamically create an object based on the className and return it."
 | 
			
		||||
 | 
			
		||||
def toDiffableString(value):
 | 
			
		||||
    s = str(value)
 | 
			
		||||
    if not isinstance(objargs, list):
 | 
			
		||||
        objargs = [objargs]
 | 
			
		||||
 | 
			
		||||
    if className == "None":
 | 
			
		||||
        return None
 | 
			
		||||
    elif className == "bool":
 | 
			
		||||
        if ((len(objargs) < 1) or (objargs[0].lower() == "false") or (not objargs[0])):
 | 
			
		||||
            return False
 | 
			
		||||
        return True
 | 
			
		||||
    if className == "str" or className == "unicode": # don"t strip: blanks are significant
 | 
			
		||||
        if len(objargs) > 0:
 | 
			
		||||
            try:
 | 
			
		||||
                return saxutils.unescape(objargs[0]).encode()
 | 
			
		||||
            except:
 | 
			
		||||
                return "?"
 | 
			
		||||
        else:
 | 
			
		||||
            return ""
 | 
			
		||||
 | 
			
		||||
    classtype = classForName(className)
 | 
			
		||||
    if (classtype == None):
 | 
			
		||||
        raise Exception("Could not find class %s" % className)
 | 
			
		||||
        
 | 
			
		||||
    if (len(objargs) > 0):
 | 
			
		||||
        return classtype(*objargs)
 | 
			
		||||
    else:
 | 
			
		||||
        return classtype()
 | 
			
		||||
 | 
			
		||||
def getClassProperty(classType, propertyName):
 | 
			
		||||
    return getattr(classType, propertyName)
 | 
			
		||||
    
 | 
			
		||||
def toDiffableRepr(value, exclude=None):
 | 
			
		||||
    if (value == None):
 | 
			
		||||
        return "None"
 | 
			
		||||
##    elif (isinstance(value, ObjectType) and hasattr(value, "__dict__")):
 | 
			
		||||
##        if (exclude == None):
 | 
			
		||||
##            exclude = []
 | 
			
		||||
##        s = "%s(%s)" % (type(value), toDiffableString(value.__dict__, exclude))
 | 
			
		||||
    elif (not isinstance(value, (BooleanType, ClassType, ComplexType, DictType, DictionaryType, 
 | 
			
		||||
                               FloatType, IntType, ListType, LongType, StringType, TupleType, 
 | 
			
		||||
                               UnicodeType, BufferType, BuiltinFunctionType, BuiltinMethodType,
 | 
			
		||||
                               CodeType, FrameType, FunctionType, GeneratorType, InstanceType,
 | 
			
		||||
                               LambdaType, MethodType, ModuleType, SliceType, TracebackType,
 | 
			
		||||
                               TypeType, XRangeType))):
 | 
			
		||||
        if (hasattr(value, "__str__")):
 | 
			
		||||
            s = str(value)
 | 
			
		||||
        elif (hasattr(value, "__dict__")):
 | 
			
		||||
            s = "%s(%s)" % (type(value), toDiffableString(value.__dict__, exclude))
 | 
			
		||||
        else:
 | 
			
		||||
            s = str(type(value))
 | 
			
		||||
        ix2 = s.find(" object at 0x")
 | 
			
		||||
        if (ix2 > 0):
 | 
			
		||||
            ix = s.rfind(".")
 | 
			
		||||
            if (ix > 0):
 | 
			
		||||
                s = "<class %s>" %s[ix+1:ix2]
 | 
			
		||||
    elif (isinstance(value, bool)):
 | 
			
		||||
        if (value):
 | 
			
		||||
            return "True"
 | 
			
		||||
        else:
 | 
			
		||||
            return "False"
 | 
			
		||||
    elif (isinstance(value, (tuple, list))):
 | 
			
		||||
        items = []
 | 
			
		||||
        for v in value:
 | 
			
		||||
            if (isinstance(v, basestring)):
 | 
			
		||||
                if (v.find("'") >= 0):
 | 
			
		||||
                    items.append('"%s"' % v)
 | 
			
		||||
                else:
 | 
			
		||||
                    items.append("'%s'" % v)
 | 
			
		||||
            else:
 | 
			
		||||
                items.append(toDiffableString(v, exclude))
 | 
			
		||||
        s = "[" + ", ".join(items) + "]"
 | 
			
		||||
    elif (isinstance(value, dict)):
 | 
			
		||||
        if (exclude == None):
 | 
			
		||||
            exclude = []
 | 
			
		||||
        items = []
 | 
			
		||||
        for key, val in value.iteritems():
 | 
			
		||||
            if (isinstance(val, UnicodeType)):
 | 
			
		||||
                items.append("'%s': u'%s'" % (key, toDiffableString(val, exclude)))
 | 
			
		||||
            elif (isinstance(val, basestring)):
 | 
			
		||||
                items.append("'%s': '%s'" % (key, toDiffableString(val, exclude)))
 | 
			
		||||
            else:
 | 
			
		||||
                items.append("'%s': %s" % (key, toDiffableString(val, exclude)))
 | 
			
		||||
        s = "{" + ", ".join(items) + "}"
 | 
			
		||||
    else:
 | 
			
		||||
        s = str(value)
 | 
			
		||||
    return s
 | 
			
		||||
    
 | 
			
		||||
def toDiffableString(value, exclude=None):
 | 
			
		||||
    if (value == None):
 | 
			
		||||
        return "None"
 | 
			
		||||
    if ((exclude != None) and not isinstance(value, (basestring, int))):
 | 
			
		||||
        for v in exclude:
 | 
			
		||||
            if (v is value):
 | 
			
		||||
                return "<recursive reference>"
 | 
			
		||||
        exclude.append(value)
 | 
			
		||||
    s = toDiffableRepr(value)
 | 
			
		||||
    ds = ""
 | 
			
		||||
    i = s.find(" at 0x") 
 | 
			
		||||
    start = 0
 | 
			
		||||
@@ -54,22 +210,43 @@ def toDiffableString(value):
 | 
			
		||||
        ds += s[start:i]
 | 
			
		||||
        start = j
 | 
			
		||||
        i = s.find(" at 0x", start) 
 | 
			
		||||
    return ds + s[start:]
 | 
			
		||||
 | 
			
		||||
    ds = ds + s[start:]
 | 
			
		||||
    i = ds.find("\\src\\")
 | 
			
		||||
    if (i < 0):
 | 
			
		||||
        i = ds.find("/src/")
 | 
			
		||||
    else:
 | 
			
		||||
        ds = ds.replace("\\", "/")
 | 
			
		||||
    if (i > 0):
 | 
			
		||||
        i += 4
 | 
			
		||||
        if (ds[i:i+5] == "\\php\\"):
 | 
			
		||||
            i += 4
 | 
			
		||||
        elif (ds[i:i+8] == "\\python\\"):
 | 
			
		||||
            i += 7
 | 
			
		||||
        ds = "filepath: ..." + ds[i:]
 | 
			
		||||
    return ds
 | 
			
		||||
        
 | 
			
		||||
def toString(value, options=0):
 | 
			
		||||
    if ((options & PRINT_OBJ_DIFFABLE) > 0):
 | 
			
		||||
        return toDiffableString(value)
 | 
			
		||||
    elif (not isinstance(value, basestring)):
 | 
			
		||||
        return str(value)
 | 
			
		||||
    return value
 | 
			
		||||
 | 
			
		||||
def toTypeString(obj):
 | 
			
		||||
def typeToString(obj, options=0):
 | 
			
		||||
    if (isinstance(obj, BooleanType)):
 | 
			
		||||
        return "bool"
 | 
			
		||||
    elif (isinstance(obj, UnicodeType)):
 | 
			
		||||
        if ((options & PRINT_OBJ_DIFFABLE) > 0):
 | 
			
		||||
            return "string"
 | 
			
		||||
        return "unicode"
 | 
			
		||||
    elif (isinstance(obj, basestring)):
 | 
			
		||||
        return "string"
 | 
			
		||||
    elif (isinstance(obj, IntType)):
 | 
			
		||||
        return "int"
 | 
			
		||||
    elif (isinstance(obj, LongType)):
 | 
			
		||||
        if ((options & PRINT_OBJ_DIFFABLE) > 0):
 | 
			
		||||
            return "int"
 | 
			
		||||
        return "long"
 | 
			
		||||
    elif (isinstance(obj, FloatType)):
 | 
			
		||||
        return "float"
 | 
			
		||||
    elif (type(obj) == ListType):
 | 
			
		||||
@@ -79,18 +256,46 @@ def toTypeString(obj):
 | 
			
		||||
    elif (isinstance(obj, TupleType)):
 | 
			
		||||
        return "tuple"
 | 
			
		||||
    elif (isinstance(obj, InstanceType)):
 | 
			
		||||
        return type(obj)
 | 
			
		||||
##        ds = str(type(obj))
 | 
			
		||||
        ds = "<class %s.%s> " % (obj.__module__, obj.__class__.__name__)
 | 
			
		||||
    else:
 | 
			
		||||
        return type(obj)
 | 
			
		||||
        ds = str(type(obj))
 | 
			
		||||
    if (options == 0):
 | 
			
		||||
        import activegrid.util.aglogging
 | 
			
		||||
        options = activegrid.util.aglogging.testMode(0, PRINT_OBJ_DIFFABLE)
 | 
			
		||||
    if ((options & PRINT_OBJ_DIFFABLE) > 0):
 | 
			
		||||
        if (ds.startswith("<class ")):
 | 
			
		||||
            ix = ds.rfind(".")
 | 
			
		||||
            if (ix < 0):
 | 
			
		||||
                ix = 8
 | 
			
		||||
            ds = "<class %s>" % ds[ix+1:-2]
 | 
			
		||||
    return ds
 | 
			
		||||
    
 | 
			
		||||
def nameToString(name, options=0):
 | 
			
		||||
    if (name.startswith("_v_")):
 | 
			
		||||
        return name[3:]
 | 
			
		||||
    if ((options & PRINT_OBJ_DIFFABLE) > 0):
 | 
			
		||||
        ix = name.find("__")
 | 
			
		||||
        if ((ix > 1) and name.startswith("_")):
 | 
			
		||||
            name = name[ix:]
 | 
			
		||||
        return toDiffableString(name)
 | 
			
		||||
    return name
 | 
			
		||||
            
 | 
			
		||||
PRINT_OBJ_GETATTR = 1
 | 
			
		||||
PRINT_OBJ_HIDE_INTERNAL = 2
 | 
			
		||||
PRINT_OBJ_COMPACT = 4
 | 
			
		||||
PRINT_OBJ_NONONE = 8
 | 
			
		||||
PRINT_OBJ_DIFFABLE = 16
 | 
			
		||||
PRINT_OBJ_HIDE_EXCLUDED = 32
 | 
			
		||||
PRINT_OBJ_INTERNAL = 512
 | 
			
		||||
 | 
			
		||||
def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent=30):
 | 
			
		||||
def printObject(out, object, name=None, indent=0, flags=0, exclude=None, remove=None, maxIndent=30):
 | 
			
		||||
    if (name == None):
 | 
			
		||||
        name = ""
 | 
			
		||||
##    elif (name.endswith("_") and not name.endswith("__")):
 | 
			
		||||
##        name = name[:-1]
 | 
			
		||||
    if ((remove != None) and (name in asDict(remove))):
 | 
			
		||||
        return False
 | 
			
		||||
    if ((maxIndent != None) and (indent > maxIndent)):
 | 
			
		||||
        print >> out, " "*indent, "%s: %s" % (name, toString(str(object), flags)),
 | 
			
		||||
        if ((flags & PRINT_OBJ_INTERNAL) == 0):
 | 
			
		||||
@@ -98,12 +303,11 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
 | 
			
		||||
        return True
 | 
			
		||||
    finalNewLine = False
 | 
			
		||||
    printed = True
 | 
			
		||||
##    if (exclude == None):
 | 
			
		||||
##        exclude = []
 | 
			
		||||
    if ((flags & PRINT_OBJ_COMPACT) > 0):
 | 
			
		||||
        if (exclude and object in exclude):
 | 
			
		||||
    if ((flags & (PRINT_OBJ_COMPACT | PRINT_OBJ_HIDE_EXCLUDED)) > 0):
 | 
			
		||||
        if ((exclude != None) and ((object in exclude) or (name in exclude))):
 | 
			
		||||
            return
 | 
			
		||||
        indent = 0
 | 
			
		||||
        if ((flags & PRINT_OBJ_COMPACT) > 0):
 | 
			
		||||
            indent = 0
 | 
			
		||||
    if ((flags & PRINT_OBJ_INTERNAL) == 0):
 | 
			
		||||
        finalNewLine = True
 | 
			
		||||
    flags |= PRINT_OBJ_INTERNAL
 | 
			
		||||
@@ -113,23 +317,23 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
 | 
			
		||||
        else:
 | 
			
		||||
            finalNewLine = False
 | 
			
		||||
            printed = False
 | 
			
		||||
    elif (name.startswith("_") and ((flags & PRINT_OBJ_HIDE_INTERNAL) > 0)):
 | 
			
		||||
    elif (name.startswith("_") and ((flags & PRINT_OBJ_HIDE_INTERNAL) > 0) and not name.startswith("_v_")):
 | 
			
		||||
        finalNewLine = False
 | 
			
		||||
        printed = False
 | 
			
		||||
    elif (isinstance(object, (list, tuple))):
 | 
			
		||||
        if ((exclude != None) and object in exclude):
 | 
			
		||||
            print >> out, " "*indent, name, " : ", toTypeString(object), " of length = ", len(object), " (already printed)",
 | 
			
		||||
            print >> out, " "*indent, name, " : ", typeToString(object, flags), " of length = ", len(object), " (already printed)",
 | 
			
		||||
        elif ((exclude != None) and name in exclude):
 | 
			
		||||
            print >> out, " "*indent, name, " : ", toTypeString(object), " of length = ", len(object), " (excluded)",
 | 
			
		||||
            print >> out, " "*indent, name, " : ", typeToString(object, flags), " of length = ", len(object), " (excluded)",
 | 
			
		||||
        else:
 | 
			
		||||
            if ((exclude != None) and (len(object) > 0)): exclude.append(object)
 | 
			
		||||
            print >> out, " "*indent, name, " : ", toTypeString(object), " of length = %d" % len(object),
 | 
			
		||||
            print >> out, " "*indent, name, " : ", typeToString(object, flags), " of length = %d" % len(object),
 | 
			
		||||
            for i, o in enumerate(object):
 | 
			
		||||
                print >> out
 | 
			
		||||
                printObject(out, o, name="[%d]" % i, indent=indent+2, flags=flags, exclude=exclude, maxIndent=maxIndent)
 | 
			
		||||
                printObject(out, o, name="[%d]" % i, indent=indent+2, flags=flags, exclude=exclude, remove=remove, maxIndent=maxIndent)
 | 
			
		||||
    elif (isinstance(object, dict)):
 | 
			
		||||
        if ((exclude != None) and object in exclude):
 | 
			
		||||
            print >> out, " "*indent, name, " : ", toTypeString(object), " (already printed)",
 | 
			
		||||
            print >> out, " "*indent, name, " : ", typeToString(object, flags), " (already printed)",
 | 
			
		||||
        else:
 | 
			
		||||
            if ((exclude != None) and (len(object) > 0)): exclude.append(object)
 | 
			
		||||
            if (len(name) > 0):
 | 
			
		||||
@@ -147,51 +351,62 @@ def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent
 | 
			
		||||
                    n = key
 | 
			
		||||
                    if (not (isinstance(n, basestring))):
 | 
			
		||||
                        n = str(n)
 | 
			
		||||
                    else:
 | 
			
		||||
                        n = nameToString(n, flags)
 | 
			
		||||
                    if ((not n.startswith("_") or ((flags & PRINT_OBJ_HIDE_INTERNAL) == 0))):
 | 
			
		||||
                        if printObject(out, object[key], name=n, indent=indent+2, flags=(flags | PRINT_OBJ_INTERNAL), exclude=exclude, maxIndent=maxIndent):
 | 
			
		||||
                        if printObject(out, object[key], name=n, indent=indent+2, flags=(flags | PRINT_OBJ_INTERNAL), exclude=exclude, remove=remove, maxIndent=maxIndent):
 | 
			
		||||
                            if ((flags & PRINT_OBJ_COMPACT) == 0):
 | 
			
		||||
                                print >> out
 | 
			
		||||
                            else:
 | 
			
		||||
                                print >> out, ",",
 | 
			
		||||
            print >> out, " "*indent, "}",
 | 
			
		||||
    elif (hasattr(object, "__dict__")):
 | 
			
		||||
        if ((exclude != None) and object in exclude):
 | 
			
		||||
            print >> out, " "*indent, name, " : ", toTypeString(object), " (already printed) = ", toDiffableString(object),
 | 
			
		||||
        if (name.startswith("_")): ## and ((flags & PRINT_OBJ_HIDE_INTERNAL) > 0)):
 | 
			
		||||
            print >> out, " "*indent, name, " : ", typeToString(object, flags),
 | 
			
		||||
        elif ((exclude != None) and ((object in exclude) or (object.__dict__ in exclude))):
 | 
			
		||||
            print >> out, " "*indent, name, " : ", typeToString(object, flags), " (already printed)",
 | 
			
		||||
        else:
 | 
			
		||||
            if (exclude != None): exclude.append(object)
 | 
			
		||||
            if (name.startswith("_")): ## and ((flags & PRINT_OBJ_HIDE_INTERNAL) > 0)):
 | 
			
		||||
                print >> out, " "*indent, name, " : ", toTypeString(object),
 | 
			
		||||
            elif ((exclude != None) and object.__dict__ in exclude):
 | 
			
		||||
                print >> out, " "*indent, name, " : ", toTypeString(object), " (already printed)",
 | 
			
		||||
            print >> out, " "*indent, name, " : ", typeToString(object, flags),
 | 
			
		||||
            if ((flags & PRINT_OBJ_GETATTR) == 0):
 | 
			
		||||
                if ((flags & PRINT_OBJ_COMPACT) == 0):
 | 
			
		||||
                    print >> out
 | 
			
		||||
                printObject(out, object.__dict__, indent=indent, flags=flags, exclude=exclude, remove=remove, maxIndent=maxIndent)
 | 
			
		||||
            else:
 | 
			
		||||
                print >> out, " "*indent, name, " : ", toTypeString(object),
 | 
			
		||||
                if ((flags & PRINT_OBJ_GETATTR) == 0):
 | 
			
		||||
                    if ((flags & PRINT_OBJ_COMPACT) == 0):
 | 
			
		||||
                if ((flags & PRINT_OBJ_COMPACT) == 0):
 | 
			
		||||
                    print >> out
 | 
			
		||||
##                    indent += 2
 | 
			
		||||
                print >> out, " "*indent, "{",
 | 
			
		||||
                keys = object.__dict__.keys()
 | 
			
		||||
                keys.sort()
 | 
			
		||||
                printed = True
 | 
			
		||||
                for key in keys:
 | 
			
		||||
                    if ((exclude != None) and (key in exclude)):
 | 
			
		||||
                        continue
 | 
			
		||||
                    if (printed and ((flags & PRINT_OBJ_COMPACT) == 0)):
 | 
			
		||||
                        print >> out
 | 
			
		||||
                    printObject(out, object.__dict__, indent=indent, flags=flags, exclude=exclude, maxIndent=maxIndent)
 | 
			
		||||
                else:
 | 
			
		||||
                    keys = object.__dict__.keys()
 | 
			
		||||
                    keys.sort()
 | 
			
		||||
                    for n in keys:
 | 
			
		||||
                        if ((flags & PRINT_OBJ_COMPACT) == 0):
 | 
			
		||||
                            print >> out
 | 
			
		||||
                        printObject(out, getattr(object, n), name=n, indent=indent+2, flags=flags, exclude=exclude, maxIndent=maxIndent)
 | 
			
		||||
                    n = nameToString(key, flags)
 | 
			
		||||
                    printed = printObject(out, getattr(object, n), name=n, indent=indent+2, flags=flags, exclude=exclude, remove=remove, maxIndent=maxIndent)
 | 
			
		||||
                if ((flags & PRINT_OBJ_COMPACT) == 0):
 | 
			
		||||
                    print >> out
 | 
			
		||||
                print >> out, " "*indent, "}",
 | 
			
		||||
    elif (indent < 0):
 | 
			
		||||
        print >> out, object,
 | 
			
		||||
    elif isinstance(object, basestring):
 | 
			
		||||
        if ((exclude != None) and name in exclude):
 | 
			
		||||
            print >> out, " "*indent, name, " : ", toTypeString(object), " of length = ", len(object), " (excluded)",
 | 
			
		||||
            print >> out, " "*indent, name, " : ", typeToString(object, flags), " of length = ", len(object), " (excluded)",
 | 
			
		||||
        elif (len(object) > 100):
 | 
			
		||||
            print >> out, " "*indent, name, ":", toTypeString(object), "[%d] = %s...%s" % (len(object), object[:50], object[-50:]),
 | 
			
		||||
            object = toString(object, flags)
 | 
			
		||||
            print >> out, " "*indent, name, ":", typeToString(object, flags), "[%d] = %s...%s" % (len(object), object[:50], object[-50:]),
 | 
			
		||||
        else:
 | 
			
		||||
            print >> out, " "*indent, name, ":", toTypeString(object), "=", str(object),
 | 
			
		||||
            print >> out, " "*indent, name, ":", typeToString(object, flags), "=", toString(object, flags),
 | 
			
		||||
##    elif (isinstance(object, float)):
 | 
			
		||||
##        val = str(object)
 | 
			
		||||
##        if (len(val) > 17):
 | 
			
		||||
##            val = val[:17]
 | 
			
		||||
##        print >> out, " "*indent, name, ":", type(object), "=", val,
 | 
			
		||||
    else:
 | 
			
		||||
        print >> out, " "*indent, name, ":", toTypeString(object), "=", str(object),
 | 
			
		||||
        print >> out, " "*indent, name, ":", typeToString(object, flags), "=", toString(object, flags),
 | 
			
		||||
    if (finalNewLine):
 | 
			
		||||
        print >> out
 | 
			
		||||
    return printed
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user