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 __init__(self, requestEnvelope, fault_action, code, reason, subCode, details): super(_SoapFaultBase, self).__init__( Prefix.partialMap(Prefix.S12, Prefix.WSA, Prefix.WSE)) replyAddress = requestEnvelope.address.mkReplyAddress(fault_action) self.addHeaderObject(replyAddress) faultNode = etree_.Element(s12Tag('Fault')) codeNode = etree_.SubElement(faultNode, s12Tag('Code')) valueNode = etree_.SubElement(codeNode, s12Tag('Value')) valueNode.text = 's12:{}'.format(code) if subCode is not None: subcodeNode = etree_.SubElement(codeNode, s12Tag('Subcode')) valueNode = etree_.SubElement(subcodeNode, s12Tag('Value')) valueNode.text = docNameFromQName(subCode, nsmap) reasonNode = etree_.SubElement(faultNode, s12Tag('Reason')) reasontextNode = etree_.SubElement(reasonNode, s12Tag('Text')) reasontextNode.set(xmlTag('lang'), 'en-US') reasontextNode.text = reason if details is not None: _detailNode = etree_.SubElement(faultNode, s12Tag('Detail')) _detailNode.set(xmlTag('lang'), 'en-US') if isinstance(details, str): detNode = etree_.SubElement(_detailNode, 'data') detNode.text = details else: _detailNode.append(details) self.addBodyElement(faultNode)
def asEtreeSubNode(self, rootNode): thisModel = etree_.SubElement(rootNode, dpwsTag('ThisModel'), nsmap=Prefix.partialMap(Prefix.DPWS)) for lang, name in self.manufacturer.items(): manufacturer = etree_.SubElement(thisModel, dpwsTag('Manufacturer')) manufacturer.text = name if lang is not None: manufacturer.set(_LANGUAGE_ATTR, lang) manufacturerUrl = etree_.SubElement(thisModel, dpwsTag('ManufacturerUrl')) manufacturerUrl.text = self.manufacturerUrl for lang, name in self.modelName.items(): manufacturer = etree_.SubElement(thisModel, dpwsTag('ModelName')) manufacturer.text = name if lang is not None: manufacturer.set(_LANGUAGE_ATTR, lang) modelNumber = etree_.SubElement(thisModel, dpwsTag('ModelNumber')) modelNumber.text = self.modelNumber modelUrl = etree_.SubElement(thisModel, dpwsTag('ModelUrl')) modelUrl.text = self.modelUrl presentationUrl = etree_.SubElement(thisModel, dpwsTag('PresentationUrl')) presentationUrl.text = self.presentationUrl
def asEtreeSubNode(self, rootNode): thisDevice = etree_.SubElement(rootNode, dpwsTag('ThisDevice'), nsmap=Prefix.partialMap(Prefix.DPWS)) for lang, name in self.friendlyName.items(): friendlyName = etree_.SubElement(thisDevice, dpwsTag('FriendlyName')) friendlyName.text = name friendlyName.set(_LANGUAGE_ATTR, lang) firmwareVersion = etree_.SubElement(thisDevice, dpwsTag('FirmwareVersion')) firmwareVersion.text = self.firmwareVersion serialNumber = etree_.SubElement(thisDevice, dpwsTag('SerialNumber')) serialNumber.text = self.serialNumber
def _mkGetRequest(self, sdcDevice, porttype, method, endpoint_reference): if sdcDevice is self.sdcDevice_final: ns = sdcDevice.mdib.sdc_definitions.DPWS_SDCNamespace else: ns = sdcDevice.mdib.sdc_definitions.MessageModelNamespace action = '{}/{}/{}'.format(ns, porttype, method) bodyNode = etree_.Element(msgTag(method)) soapEnvelope = Soap12Envelope( Prefix.partialMap(Prefix.S12, Prefix.WSA, Prefix.MSG)) identifier = uuid.uuid4().urn soapEnvelope.addHeaderObject( WsAddress(messageId=identifier, action=action, to=endpoint_reference)) soapEnvelope.addBodyObject(GenericNode(bodyNode)) soapEnvelope.validateBody(sdcDevice.mdib.bicepsSchema.bmmSchema) return soapEnvelope
def asEtreeSubNode(self, rootNode): # To (OPTIONAL), defaults to anonymous subscribe = etree_.SubElement(rootNode, wseTag('Subscribe'), nsmap=Prefix.partialMap( Prefix.WSE, Prefix.WSA)) if self.endTo is not None: endToNode = etree_.SubElement(subscribe, wseTag('EndTo')) self.endTo.asEtreeSubNode(endToNode) delivery = etree_.SubElement(subscribe, wseTag('Delivery')) delivery.set('Mode', self.delivery_mode) notifyToNode = etree_.SubElement(delivery, wseTag('NotifyTo')) self.notifyTo.asEtreeSubNode(notifyToNode) exp = etree_.SubElement(subscribe, wseTag('Expires')) exp.text = isoduration.durationString(self.expires) fil = etree_.SubElement(subscribe, wseTag('Filter')) fil.set('Dialect', DIALECT_ACTION) # Is this always this string? fil.text = self.filter
def _asEtreeNode(self): safetyInfo = etree_.Element(mdpwsTag('SafetyInfo'), nsmap=Prefix.partialMap(Prefix.MDPWS)) if self.dualChannelValues: dualChannel = etree_.SubElement(safetyInfo, mdpwsTag('DualChannel')) for ref, value in self.dualChannelValues.items(): dcValue = etree_.SubElement(dualChannel, mdpwsTag('DcValue')) dcValue.set('ReferencedSelector', ref) algorithm = self._algorithm or Sha1 dcValue.text = algorithm(value) if self.safetyContextValues: safetyContext = etree_.SubElement(safetyInfo, mdpwsTag('SafetyContext')) for ref, value in self.safetyContextValues.items(): ctxtValue = etree_.SubElement(safetyContext, mdpwsTag('CtxtValue')) ctxtValue.set('ReferencedSelector', ref) ctxtValue.text = value return safetyInfo