Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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