def unsubscribe(self): if not self.isSubscribed: return soapEnvelope = Soap12Envelope( Prefix.partialMap(Prefix.S12, Prefix.WSA, Prefix.WSE)) soapEnvelope.setAddress( WsAddress( action= 'http://schemas.xmlsoap.org/ws/2004/08/eventing/Unsubscribe', to=urllib.parse.urlunparse(self._subscriptionManagerAddress))) self._add_device_references(soapEnvelope) soapEnvelope.addBodyElement(etree_.Element(wseTag('Unsubscribe'))) resultSoapEnvelope = self.dpwsHosted.soapClient.postSoapEnvelopeTo( self._subscriptionManagerAddress.path, soapEnvelope, msg='unsubscribe') responseAction = resultSoapEnvelope.address.action # check response: response does not contain explicit status. If action== UnsubscribeResponse all is fine. if responseAction == 'http://schemas.xmlsoap.org/ws/2004/08/eventing/UnsubscribeResponse': self._logger.info( 'unsubscribe: end of subscription {} was confirmed.', self._filter) else: self._logger.error('unsubscribe: unexpected response action: {}', resultSoapEnvelope.as_xml(pretty=True)) raise RuntimeError( 'unsubscribe: unexpected response action: {}'.format( resultSoapEnvelope.as_xml(pretty=True)))
def _mkGetStatusEnvelope(self): soapEnvelope = Soap12Envelope(Prefix.partialMap(Prefix.S12, Prefix.WSA, Prefix.WSE)) soapEnvelope.setAddress(WsAddress(action='http://schemas.xmlsoap.org/ws/2004/08/eventing/GetStatus', to=urllib.parse.urlunparse(self._subscriptionManagerAddress))) self._add_device_references(soapEnvelope) bodyNode = etree_.Element(wseTag('GetStatus')) soapEnvelope.addBodyElement(bodyNode) return soapEnvelope
def _mkRenewEnvelope(self, expire_minutes): soapEnvelope = Soap12Envelope(Prefix.partialMap(Prefix.S12, Prefix.WSA, Prefix.WSE)) soapEnvelope.setAddress(WsAddress(action='http://schemas.xmlsoap.org/ws/2004/08/eventing/Renew', to=urllib.parse.urlunparse(self._subscriptionManagerAddress))) self._add_device_references(soapEnvelope) renewNode = etree_.Element(wseTag('Renew'), nsmap=Prefix.partialMap(Prefix.WSE)) expiresNode = etree_.SubElement(renewNode, wseTag('Expires'), nsmap=Prefix.partialMap(Prefix.WSE)) expiresNode.text = isoduration.durationString(expire_minutes * 60) soapEnvelope.addBodyElement(renewNode) return soapEnvelope
def _mkSubscribeEnvelope(self, subscribe_epr, expire_minutes): soapEnvelope = Soap12Envelope(Prefix.partialMap(Prefix.S12, Prefix.WSA, Prefix.WSE)) soapEnvelope.setAddress(WsAddress(action='http://schemas.xmlsoap.org/ws/2004/08/eventing/Subscribe', to=subscribe_epr)) body = WsSubscribe(notifyTo=WsaEndpointReferenceType(self._notification_url, referenceParametersNode=[self.notifyTo_identifier]), endTo=WsaEndpointReferenceType(self._endTo_url, referenceParametersNode=[self._endTo_identifier]), expires=expire_minutes * 60, filter_=self._filter) soapEnvelope.addBodyObject(body) return soapEnvelope
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