129 lines
6.9 KiB
Python
129 lines
6.9 KiB
Python
|
#----------------------------------------------------------------------------
|
||
|
# Name: xmlutils.py
|
||
|
# Purpose: XML and Marshaller Utilities
|
||
|
#
|
||
|
# Author: Jeff Norton
|
||
|
#
|
||
|
# Created: 6/2/05
|
||
|
# CVS-ID: $Id$
|
||
|
# Copyright: (c) 2004-2005 ActiveGrid, Inc.
|
||
|
# License: wxWindows License
|
||
|
#----------------------------------------------------------------------------
|
||
|
|
||
|
import os
|
||
|
import activegrid.util.objutils as objutils
|
||
|
import activegrid.util.xmlmarshaller as xmlmarshaller
|
||
|
|
||
|
agKnownTypes = None
|
||
|
|
||
|
def defaultLoad(fileObject, knownTypes=None):
|
||
|
xml = fileObject.read()
|
||
|
loadedObject = unmarshal(xml, knownTypes=knownTypes)
|
||
|
if hasattr(fileObject, 'name'):
|
||
|
loadedObject.fileName = os.path.abspath(fileObject.name)
|
||
|
loadedObject.initialize()
|
||
|
return loadedObject
|
||
|
|
||
|
def unmarshal(xml, knownTypes=None):
|
||
|
if not knownTypes: knownTypes = getAgKnownTypes()
|
||
|
return xmlmarshaller.unmarshal(xml, knownTypes=knownTypes)
|
||
|
|
||
|
def defaultSave(fileObject, objectToSave, prettyPrint=True, knownTypes=None, encoding='utf-8'):
|
||
|
xml = marshal(objectToSave, prettyPrint=prettyPrint, knownTypes=knownTypes, encoding=encoding)
|
||
|
fileObject.write(xml)
|
||
|
fileObject.flush()
|
||
|
|
||
|
def marshal(objectToSave, prettyPrint=True, knownTypes=None, encoding='utf-8'):
|
||
|
if not knownTypes: knownTypes = getAgKnownTypes()
|
||
|
return xmlmarshaller.marshal(objectToSave, prettyPrint=prettyPrint, knownTypes=knownTypes, encoding=encoding)
|
||
|
|
||
|
def cloneObject(objectToClone, knownTypes=None, encoding='utf-8'):
|
||
|
if not knownTypes: knownTypes = getAgKnownTypes()
|
||
|
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 getAgKnownTypes():
|
||
|
import activegrid.model.processmodel
|
||
|
import activegrid.model.schema
|
||
|
import activegrid.data.dataservice
|
||
|
import activegrid.server.deployment
|
||
|
global agKnownTypes
|
||
|
if agKnownTypes == None:
|
||
|
tmpAgKnownTypes = {}
|
||
|
AG_TYPE_MAPPING = {
|
||
|
"ag:append" : "activegrid.model.processmodel.AppendOperation",
|
||
|
"ag:body" : "activegrid.model.processmodel.Body",
|
||
|
"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:restParameter" : "activegrid.server.deployment.RestParameter",
|
||
|
"ag:restService" : "activegrid.server.deployment.RestService",
|
||
|
"ag:schemaOptions" : "activegrid.model.schema.SchemaOptions",
|
||
|
"ag:schemaref" : "activegrid.server.deployment.SchemaRef",
|
||
|
"ag:serviceref" : "activegrid.server.deployment.ServiceRef",
|
||
|
"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",
|
||
|
}
|
||
|
|
||
|
for keyName, className in AG_TYPE_MAPPING.iteritems():
|
||
|
try:
|
||
|
tmpAgKnownTypes[keyName] = objutils.classForName(className)
|
||
|
except KeyError:
|
||
|
print "Error mapping knownType", className
|
||
|
pass
|
||
|
if len(tmpAgKnownTypes) > 0:
|
||
|
agKnownTypes = tmpAgKnownTypes
|
||
|
return agKnownTypes
|