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'):
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