def asEtreeSubNode(self, rootNode): # To (OPTIONAL), defaults to anonymous node = etree_.SubElement(rootNode, wsaTag('To'), attrib={s12Tag('mustUnderstand'): 'true'}) node.text = self.to or WSA_ANONYMOUS #From if self.from_: self.from_.asEtreeSubNode(rootNode) # ReplyTo (OPTIONAL), defaults to anonymous if self.replyTo: self.replyTo.asEtreeSubNode(rootNode) # FaultTo (OPTIONAL) if self.faultTo: self.faultTo.asEtreeSubNode(rootNode) # Action (REQUIRED) node = etree_.SubElement(rootNode, wsaTag('Action'), attrib={s12Tag('mustUnderstand'): 'true'}) node.text = self.action # MessageID (OPTIONAL) if self.messageId: node = etree_.SubElement(rootNode, wsaTag('MessageID')) node.text = self.messageId # RelatesTo (OPTIONAL) if self.relatesTo: node = etree_.SubElement(rootNode, wsaTag('RelatesTo')) node.text = self.relatesTo if self.relationshipType is not None: node.set('RelationshipType', self.relationshipType) if self.referenceParametersNode: rootNode.append(copy.copy(self.referenceParametersNode))
def asEtreeSubNode(self, rootNode): _ns = Prefix.partialMap(Prefix.DPWS, Prefix.WSA) # reverse lookup( key is namespace, value is prefix) res = {} for k, v in _ns.items(): res[v] = k for k, v in rootNode.nsmap.items(): res[v] = k # must explicitely add namespaces of types to Host node, because list of qnames is not handled by lxml typesTexts = [] if self.types: for qname in self.types: prefix = res.get(qname.namespace) if not prefix: # create a random prefix prefix = '_dpwsh{}'.format(len(_ns)) _ns[prefix] = qname.namespace typesTexts.append('{}:{}'.format(prefix, qname.localname)) hostNode = etree_.SubElement(rootNode, dpwsTag('Host')) #, nsmap=_ns) epRefNode = etree_.SubElement( hostNode, wsaTag('EndpointReference')) #, nsmap=_ns) for epRef in self.endpointReferences: epRef.asEtreeSubNode(epRefNode) if typesTexts: typesNode = etree_.SubElement( hostNode, dpwsTag('Types'), nsmap=_ns ) # add also namespace prefixes that were locally generated typesText = ' '.join(typesTexts) typesNode.text = typesText
def asEtreeSubNode(self, rootNode): node = etree_.SubElement(rootNode, wsaTag('Address')) node.text = self.address if self.referenceParametersNode is not None: rootNode.append(copy.copy(self.referenceParametersNode)) if self.metaDataNode is not None: rootNode.append(self.metaDataNode)
def __init__(self, address, referenceParametersNode=None, metaDataNode=None): self.address = address # type="wsa:AttributedURI", which is an xs:anyURI element self.referenceParametersNode = None self.metaDataNode = None if referenceParametersNode is not None: if hasattr(referenceParametersNode, 'tag') and referenceParametersNode.tag == wsaTag( 'ReferenceParameters'): self.referenceParametersNode = referenceParametersNode # any content allowed. optional else: self.referenceParametersNode = etree_.Element( wsaTag('ReferenceParameters')) self.referenceParametersNode.extend(referenceParametersNode) if metaDataNode is not None: if hasattr(metaDataNode, 'tag') and metaDataNode.tag == wsaTag('MetaData'): self.metaDataNode = metaDataNode # any content allowed. optional else: self.metaDataNode = etree_.Element(wsaTag('MetaData')) self.metaDataNode.extend(metaDataNode)
def asEtreeSubNode(self, rootNode): hostedNode = etree_.SubElement(rootNode, dpwsTag('Hosted')) epRefNode = etree_.SubElement(hostedNode, wsaTag('EndpointReference')) for epRef in self.endpointReferences: epRef.asEtreeSubNode(epRefNode) if self.types: typesText = ' '.join( [docNameFromQName(t, rootNode.nsmap) for t in self.types]) typesNode = etree_.SubElement(hostedNode, dpwsTag('Types')) #, nsmap=ns) typesNode.text = typesText serviceNode = etree_.SubElement(hostedNode, dpwsTag('ServiceId')) #, nsmap=ns) serviceNode.text = self.serviceId