X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6f1a3f9c1a056e5ae063f020d38a5f40cc5e85ef..d654745dc573bceda1e9c4c0dc0502f534166e1b:/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 index 3b2935f1e5..97bd2f79e0 100644 --- a/wxPython/samples/ide/activegrid/util/objutils.py +++ b/wxPython/samples/ide/activegrid/util/objutils.py @@ -14,23 +14,89 @@ import logging import traceback import sys import os - import xmlmarshaller +AG_TYPE_MAPPING = { "ag:append" : "activegrid.model.processmodel.AppendOperation", + "ag:body" : "activegrid.model.processmodel.Body", + "ag:copy" : "activegrid.model.processmodel.CopyOperation", + "ag:cssRule" : "activegrid.model.processmodel.CssRule", + "ag:datasource" : "activegrid.data.dataservice.DataSource", + "ag:debug" : "activegrid.model.processmodel.DebugOperation", + "ag:deployment" : "activegrid.server.deployment.Deployment", + "ag:glue" : "activegrid.model.processmodel.Glue", + "ag:hr" : "activegrid.model.processmodel.HorizontalRow", + "ag:image" : "activegrid.model.processmodel.Image", + "ag:inputs" : "activegrid.model.processmodel.Inputs", + "ag:label" : "activegrid.model.processmodel.Label", + "ag:processmodel": "activegrid.model.processmodel.ProcessModel", + "ag:processmodelref" : "activegrid.server.deployment.ProcessModelRef", + "ag:query" : "activegrid.model.processmodel.Query", + "ag:schemaOptions" : "activegrid.model.schema.SchemaOptions", + "ag:schemaref" : "activegrid.server.deployment.SchemaRef", + "ag:set" : "activegrid.model.processmodel.SetOperation", + "ag:text" : "activegrid.model.processmodel.Text", + "ag:title" : "activegrid.model.processmodel.Title", + "ag:view" : "activegrid.model.processmodel.View", + "bpws:case" : "activegrid.model.processmodel.BPELCase", + "bpws:catch" : "activegrid.model.processmodel.BPELCatch", + "bpws:faultHandlers" : "activegrid.model.processmodel.BPELFaultHandlers", + "bpws:invoke" : "activegrid.model.processmodel.BPELInvoke", + "bpws:onMessage" : "activegrid.model.processmodel.BPELOnMessage", + "bpws:otherwise" : "activegrid.model.processmodel.BPELOtherwise", + "bpws:pick" : "activegrid.model.processmodel.BPELPick", + "bpws:process" : "activegrid.model.processmodel.BPELProcess", + "bpws:receive" : "activegrid.model.processmodel.BPELReceive", + "bpws:reply" : "activegrid.model.processmodel.BPELReply", + "bpws:scope" : "activegrid.model.processmodel.BPELScope", + "bpws:sequence" : "activegrid.model.processmodel.BPELSequence", + "bpws:switch" : "activegrid.model.processmodel.BPELSwitch", + "bpws:terminate" : "activegrid.model.processmodel.BPELTerminate", + "bpws:variable" : "activegrid.model.processmodel.BPELVariable", + "bpws:variables" : "activegrid.model.processmodel.BPELVariables", + "bpws:while" : "activegrid.model.processmodel.BPELWhile", + "wsdl:message" : "activegrid.model.processmodel.WSDLMessage", + "wsdl:part" : "activegrid.model.processmodel.WSDLPart", + "xforms:group" : "activegrid.model.processmodel.XFormsGroup", + "xforms:input" : "activegrid.model.processmodel.XFormsInput", + "xforms:label" : "activegrid.model.processmodel.XFormsLabel", + "xforms:output" : "activegrid.model.processmodel.XFormsOutput", + "xforms:secret" : "activegrid.model.processmodel.XFormsSecret", + "xforms:submit" : "activegrid.model.processmodel.XFormsSubmit", + "xs:all" : "activegrid.model.schema.XsdSequence", + "xs:complexType" : "activegrid.model.schema.XsdComplexType", + "xs:element" : "activegrid.model.schema.XsdElement", + "xs:field" : "activegrid.model.schema.XsdKeyField", + "xs:key" : "activegrid.model.schema.XsdKey", + "xs:keyref" : "activegrid.model.schema.XsdKeyRef", + "xs:schema" : "activegrid.model.schema.Schema", + "xs:selector" : "activegrid.model.schema.XsdKeySelector", + "xs:sequence" : "activegrid.model.schema.XsdSequence", + "projectmodel" : "activegrid.tool.ProjectEditor.ProjectModel", + } + def defaultLoad(fileObject, knownTypes=None): xml = fileObject.read() - loadedObject = xmlmarshaller.unmarshal(xml, knownTypes=knownTypes) + loadedObject = defaultUnmarshal(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) +def defaultUnmarshal(xml, knownTypes=None): + if not knownTypes: knownTypes = AG_TYPE_MAPPING + return xmlmarshaller.unmarshal(xml, knownTypes=knownTypes) + +def defaultSave(fileObject, objectToSave, prettyPrint=True, knownTypes=None, withEncoding=1, encoding='utf-8'): + xml = defaultMarshal(objectToSave, prettyPrint=prettyPrint, knownTypes=knownTypes, withEncoding=withEncoding, encoding=encoding) fileObject.write(xml) fileObject.flush() - + +def defaultMarshal(objectToSave, prettyPrint=True, knownTypes=None, withEncoding=1, encoding='utf-8'): + if not knownTypes: knownTypes = AG_TYPE_MAPPING + return xmlmarshaller.marshal(objectToSave, prettyPrint=prettyPrint, knownTypes=knownTypes, withEncoding=withEncoding, encoding=encoding) + def clone(objectToClone, knownTypes=None, encoding='utf-8'): + if not knownTypes: knownTypes = AG_TYPE_MAPPING xml = xmlmarshaller.marshal(objectToClone, prettyPrint=True, knownTypes=knownTypes, encoding=encoding) clonedObject = xmlmarshaller.unmarshal(xml, knownTypes=knownTypes) if hasattr(objectToClone, 'fileName'): @@ -91,3 +157,116 @@ def hasPropertyValue(obj, attr): except KeyError: pass return hasProp + +def toDiffableString(value): + s = repr(value) + ds = "" + i = s.find(" at 0x") + start = 0 + while (i >= 0): + j = s.find(">", i) + if (j < i): + break + ds += s[start:i] + start = j + i = s.find(" at 0x", start) + return ds + s[start:] + +PRINT_OBJ_GETATTR = 1 +PRINT_OBJ_HIDE_INTERNAL = 2 +PRINT_OBJ_COMPACT = 4 +PRINT_OBJ_NONONE = 8 +PRINT_OBJ_INTERNAL = 512 + +def printObject(out, object, name="", indent=0, flags=0, exclude=None, maxIndent=30): + if ((maxIndent != None) and (indent > maxIndent)): + print >> out, " "*indent, name, str(object) + return True + finalNewLine = False + printed = True + if ((flags & PRINT_OBJ_COMPACT) > 0): + if (exclude and object in exclude): + return + indent = 0 + if ((flags & PRINT_OBJ_INTERNAL) == 0): + finalNewLine = True + flags |= PRINT_OBJ_INTERNAL + if (object == None): + if (flags & PRINT_OBJ_NONONE) == 0: + print >> out, " "*indent, name, " = None", + else: + finalNewLine = False + printed = False + elif (name.startswith("_") and ((flags & PRINT_OBJ_HIDE_INTERNAL) > 0)): + finalNewLine = False + printed = False + elif (isinstance(object, (list, tuple))): + if (exclude and object in exclude): + print >> out, " "*indent, name, " : ", type(object), " of length = ", len(object), " (already printed)", + elif (exclude and name in exclude): + print >> out, " "*indent, name, " : ", type(object), " of length = ", len(object), " (excluded)", + else: + if (exclude != None): exclude.append(object) + print >> out, " "*indent, name, " : ", type(object), " of length = %i" % len(object), + for i, o in enumerate(object): + print >> out + printObject(out, o, name="[%i]" % i, indent=indent+2, flags=flags, exclude=exclude, maxIndent=maxIndent) + elif (isinstance(object, dict)): + if (exclude and object in exclude): + print >> out, " "*indent, name, " : ", type(object), " (already printed)", + else: + if (exclude != None): exclude.append(object) + if (len(name) > 0): + print >> out, " "*indent, name, + if ((flags & PRINT_OBJ_COMPACT) == 0): + print >> out + indent += 2 + print >> out, " "*indent, "{", + if ((flags & PRINT_OBJ_COMPACT) == 0): + print >> out + keys = object.keys() + keys.sort() + for n in keys: + if ((n != None) and (not n.startswith("_") or ((flags & PRINT_OBJ_HIDE_INTERNAL) == 0))): + if printObject(out, object[n], name=n, indent=indent+2, flags=flags, exclude=exclude, maxIndent=maxIndent): + if ((flags & PRINT_OBJ_COMPACT) == 0): + print >> out + else: + print >> out, ",", + print >> out, " "*indent, "}", + elif (hasattr(object, "__dict__")): + if (exclude and object in exclude): + print >> out, " "*indent, name, " : ", type(object), " (already printed) = ", toDiffableString(object), + else: + if (exclude != None): exclude.append(object) + if (name.startswith("_")): + print >> out, " "*indent, name, " : ", type(object), + elif (exclude and object.__dict__ in exclude): + print >> out, " "*indent, name, " : ", type(object), " (already printed)", + else: + print >> out, " "*indent, name, " : ", type(object), + if ((flags & PRINT_OBJ_GETATTR) == 0): + if ((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) + elif (indent < 0): + print >> out, object, + elif isinstance(object, basestring): + if (exclude and name in exclude): + print >> out, " "*indent, name, " : ", type(object), " of length = ", len(object), " (excluded)", + elif (len(object) > 100): + print >> out, " "*indent, name, ":", type(object), "[%i] = %s...%s" % (len(object), object[:50], object[-50:]), + else: + print >> out, " "*indent, name, ":", type(object), "=", str(object), + else: + print >> out, " "*indent, name, ":", type(object), "=", str(object), + if (finalNewLine): + print >> out + return printed