示例#1
0
    def test_PatientContextStateContainer_final(self):
        def verifyEqual(origin, copied):
            self.assertEqual(copied.Handle, origin.Handle)
            self.assertEqual(copied.Givenname, origin.Givenname)
            self.assertEqual(copied.Middlename, origin.Middlename)
            self.assertEqual(copied.Familyname, origin.Familyname)
            self.assertEqual(copied.DateOfBirth, origin.DateOfBirth)
            self.assertEqual(copied.Height, origin.Height)
            self.assertEqual(copied.Weight, origin.Weight)
            self.assertEqual(copied.Race, origin.Race)
            self.assertEqual(copied.Identification, origin.Identification)
            self._verifyAbstractStateContainerDataEqual(copied, origin)

        sc = statecontainers.PatientContextStateContainer(
            nsmapper=self.nsmapper, descriptorContainer=self.dc, node=None)

        self.assertTrue(sc.Handle is not None)

        sc.Givenname = 'Karl'
        sc.Middlename = 'M.'
        sc.Familyname = 'Klammer'
        sc.Height = pmtypes.Measurement(88.2, pmtypes.CodedValue('abc', 'def'))
        sc.Weight = pmtypes.Measurement(68.2, pmtypes.CodedValue('abc'))
        sc.Race = pmtypes.CodedValue('123', 'def')

        sc.DateOfBirth = datetime.date(2001, 3, 12)
        print(sc.DateOfBirth)

        sc.Identification.append(
            pmtypes.InstanceIdentifier('abc', pmtypes.CodedValue('123'), [
                pmtypes.LocalizedText('Peter', 'en'),
                pmtypes.LocalizedText('Paul'),
                pmtypes.LocalizedText('Mary')
            ]))
        sc.Identification.append(
            pmtypes.InstanceIdentifier('def', pmtypes.CodedValue('456'), [
                pmtypes.LocalizedText('John'),
                pmtypes.LocalizedText('Jim'),
                pmtypes.LocalizedText('Jane')
            ]))

        #test creation from node
        node = sc.mkStateNode()
        print(etree_.tostring(node, pretty_print=True))
        sc2 = statecontainers.PatientContextStateContainer(
            nsmapper=self.nsmapper, descriptorContainer=self.dc, node=node)
        verifyEqual(sc, sc2)

        #test update from node
        sc.Middlename = 'K.'
        sc.DateOfBirth = datetime.datetime(2001, 3, 12, 14, 30, 1)
        sc.incrementState()
        sc.Height._value = 42
        sc.Weight._value = 420
        node = sc.mkStateNode()
        sc2.updateFromNode(node)
        verifyEqual(sc, sc2)
示例#2
0
    def test_AbstractMetricStateContainer_Final(self):
        dc = descriptorcontainers.NumericMetricDescriptorContainer(
            nsmapper=self.nsmapper,
            nodeName='MyDescriptor',
            handle='123',
            parentHandle='456')
        sc = statecontainers.NumericMetricStateContainer(
            nsmapper=self.nsmapper, descriptorContainer=dc, node=None)

        self.assertEqual(sc.ActivationState, 'On')
        for value in ('foo', 'bar'):
            sc.ActivationState = value
            self.assertEqual(sc.ActivationState, value)
            node = sc.mkStateNode()
            self.assertEqual(node.get('ActivationState'), value)

        self.assertEqual(sc.ActiveDeterminationPeriod, None)
        for value in (21, 42):
            sc.ActiveDeterminationPeriod = value
            self.assertEqual(sc.ActiveDeterminationPeriod, value)
            node = sc.mkStateNode()
            self.assertEqual(
                node.get('ActiveDeterminationPeriod'),
                containerproperties.DurationConverter.toXML(value))
        sc.BodySite = [pmtypes.CodedValue('ABC')]
        sc.PhysicalConnector = pmtypes.PhysicalConnectorInfo(
            [pmtypes.LocalizedText('ABC')], 1)

        # test creation from node
        node = sc.mkStateNode()
        sc2 = statecontainers.NumericMetricStateContainer(
            nsmapper=self.nsmapper, descriptorContainer=dc, node=node)
        self.assertEqual(sc.ActivationState, sc2.ActivationState)
        self.assertEqual(sc.ActiveDeterminationPeriod,
                         sc2.ActiveDeterminationPeriod)
        self.assertEqual(sc.BodySite, sc2.BodySite)
        self.assertEqual(sc.PhysicalConnector, sc2.PhysicalConnector)
        self._verifyAbstractStateContainerDataEqual(sc, sc2)

        # test update from Node
        sc.ActivationState = 'something else'
        sc.ActiveDeterminationPeriod += 1
        sc.BodySite = [pmtypes.CodedValue('DEF')]
        sc.PhysicalConnector = pmtypes.PhysicalConnectorInfo(
            [pmtypes.LocalizedText('DEF')], 2)
        sc.incrementState()
        node = sc.mkStateNode()
        sc2.updateFromNode(node)
        self.assertEqual(sc.ActivationState, sc2.ActivationState)
        self.assertEqual(sc.BodySite, sc2.BodySite)
        self.assertEqual(sc.PhysicalConnector, sc2.PhysicalConnector)
        self.assertEqual(sc.ActiveDeterminationPeriod,
                         sc2.ActiveDeterminationPeriod)
        self._verifyAbstractStateContainerDataEqual(sc, sc2)
    def test_ActivateOperationDescriptorContainer(self):
        def _cmp_ActivateOperationDescriptorContainer(_dc, _dc2):
            self.assertEqual(_dc.diff(_dc2), [])
            self.assertEqual(_dc.Argument, _dc2.Argument)
            #            self.assertEqual(_dc.ActivationDuration, _dc2.ActivationDuration)
            self.assertEqual(_dc.Retriggerable, _dc2.Retriggerable)

        dc = descriptorcontainers.ActivateOperationDescriptorContainer(
            nsmapper=self.nsmapper,
            nodeName=namespaces.domTag('MyDescriptor'),
            handle='123',
            parentHandle='456',
        )
        # create copy with default values
        node = dc.mkNode()
        dc2 = descriptorcontainers.ActivateOperationDescriptorContainer.fromNode(
            nsmapper=self.nsmapper, node=node, parentHandle='467')
        _cmp_ActivateOperationDescriptorContainer(dc, dc2)

        dc.Argument = [
            pmtypes.Argument(argName=pmtypes.CodedValue('abc', 'def'),
                             arg=namespaces.domTag('blubb'))
        ]
        node = dc.mkNode()
        dc2.updateDescrFromNode(node)
        _cmp_ActivateOperationDescriptorContainer(dc, dc2)
    def setUp(self):
        self.mdib = sdc11073.mdib.DeviceMdibContainer(SDC_v1_Definitions)
        self.domSchema = self.mdib.bicepsSchema.pmSchema
        self.msgSchema = self.mdib.bicepsSchema.bmmSchema

        # this structure is not realistic, but sufficient for what we need here.
        desc = dc.MdsDescriptorContainer(
            self.mdib.nsmapper,
            nodeName=sdc11073.namespaces.domTag('Mds'),
            handle='42',
            parentHandle=None,
        )
        self.mdib.descriptions.addObject(desc)
        for h in HANDLES:
            desc = dc.RealTimeSampleArrayMetricDescriptorContainer(
                self.mdib.nsmapper,
                sdc11073.namespaces.domTag('Metric'),
                handle=h,
                parentHandle='42',
            )
            desc.SamplePeriod = 0.1
            desc.unit = pmtypes.CodedValue('abc')
            desc.MetricAvailability = pmtypes.MetricAvailability.CONTINUOUS
            desc.MetricCategory = pmtypes.MetricCategory.MEASUREMENT
            self.mdib.descriptions.addObject(desc)

        self.sdcDevice = None
        self.nsmapper = sdc11073.namespaces.DocNamespaceHelper()
    def test_AbstractMetricDescriptorContainer(self):
        dc = descriptorcontainers.AbstractMetricDescriptorContainer(
            nsmapper=self.nsmapper,
            nodeName='MyDescriptor',
            handle='123',
            parentHandle='456',
        )
        self.assertEqual(dc.MetricAvailability, 'Cont')  # the default value
        self.assertEqual(dc.MetricCategory, 'Unspec')  # the default value
        self.assertEqual(dc.DeterminationPeriod, None)
        self.assertEqual(dc.MaxMeasurementTime, None)
        self.assertEqual(dc.MaxDelayTime, None)

        #test creation from node
        node = dc.mkNode()
        dc2 = descriptorcontainers.AbstractMetricDescriptorContainer.fromNode(
            nsmapper=self.nsmapper, node=node, parentHandle='467')
        self.assertEqual(dc2.MetricAvailability, 'Cont')
        self.assertEqual(dc2.MetricCategory, 'Unspec')
        self.assertEqual(dc2.DeterminationPeriod, None)
        self.assertEqual(dc2.MaxMeasurementTime, None)
        self.assertEqual(dc2.MaxDelayTime, None)

        #test update from node
        dc.MetricAvailability = 'Avail'
        dc.MetricCategory = 'Msmnt'

        dc.DeterminationPeriod = 3.5
        dc.MaxMeasurementTime = 2.1
        dc.MaxDelayTime = 4
        dc.Unit = pmtypes.CodedValue('abc', 'def')
        dc.BodySite.append(pmtypes.CodedValue('ABC', 'DEF'))
        dc.BodySite.append(pmtypes.CodedValue('GHI', 'JKL'))
        node = dc.mkNode()
        dc2.updateDescrFromNode(node)

        self.assertEqual(dc2.MetricAvailability, 'Avail')
        self.assertEqual(dc2.MetricCategory, 'Msmnt')
        self.assertEqual(dc2.DeterminationPeriod, 3.5)
        self.assertEqual(dc2.MaxMeasurementTime, 2.1)
        self.assertEqual(dc2.MaxDelayTime, 4)
        self.assertEqual(dc2.Unit, dc.Unit)
        self.assertEqual(dc2.BodySite, dc.BodySite)
        self.assertEqual(dc2.BodySite, [
            pmtypes.CodedValue('ABC', 'DEF'),
            pmtypes.CodedValue('GHI', 'JKL')
        ])
    def test_waveformSubscription(self):
        self._model = sdc11073.pysoap.soapenvelope.DPWSThisModel(
            manufacturer='Chinakracher GmbH',
            manufacturerUrl='www.chinakracher.com',
            modelName='BummHuba',
            modelNumber='1.0',
            modelUrl='www.chinakracher.com/bummhuba/model',
            presentationUrl='www.chinakracher.com/bummhuba/presentation')
        self._device = sdc11073.pysoap.soapenvelope.DPWSThisDevice(
            friendlyName='Big Bang Practice',
            firmwareVersion='0.99',
            serialNumber='87kabuuum889')

        tr = waveforms.TriangleGenerator(min_value=0,
                                         max_value=10,
                                         waveformperiod=2.0,
                                         sampleperiod=0.02)
        st = waveforms.SawtoothGenerator(min_value=0,
                                         max_value=10,
                                         waveformperiod=2.0,
                                         sampleperiod=0.02)
        si = waveforms.SinusGenerator(min_value=-8.0,
                                      max_value=10.0,
                                      waveformperiod=5.0,
                                      sampleperiod=0.02)

        self.mdib.registerWaveformGenerator(HANDLES[0], tr)
        self.mdib.registerWaveformGenerator(HANDLES[1], st)
        self.mdib.registerWaveformGenerator(HANDLES[2], si)

        annotation = pmtypes.Annotation(pmtypes.CodedValue('a', 'b'))
        self.mdib.registerAnnotationGenerator(annotation,
                                              triggerHandle=HANDLES[2],
                                              annotatedHandles=(HANDLES[0],
                                                                HANDLES[1],
                                                                HANDLES[2]))

        self.wsDiscovery = mockstuff.MockWsDiscovery(['5.6.7.8'])
        uuid = None  # let device create one
        self.sdcDevice = sdc11073.sdcdevice.SdcDevice(self.wsDiscovery,
                                                      uuid,
                                                      self._model,
                                                      self._device,
                                                      self.mdib,
                                                      logLevel=logging.DEBUG)
        self.sdcDevice.startAll()
        testSubscr = mockstuff.TestDevSubscription(
            self.sdcDevice.mdib.sdc_definitions.Actions.Waveform,
            self.sdcDevice.mdib.bicepsSchema)
        self.sdcDevice.subscriptionsManager._subscriptions.addObject(
            testSubscr)

        time.sleep(3)
        print(testSubscr.reports[-2].as_xml(pretty=True))
        print(testSubscr.reports[-1].as_xml(pretty=True))
        self.assertGreater(len(testSubscr.reports), 20)
示例#7
0
    def test_CodedValue(self):
        c1 = pmtypes.CodedValue(42)
        c2 = pmtypes.CodedValue(42, codingsystem='abc')
        # compare with simple string or int shall imply default coding system
        self.assertEqual(c1, 42)
        self.assertEqual(c1, '42')
        # if CodedValue does not have default coding systen, this compare shall return False
        self.assertNotEqual(c2, 42)
        # it shall be possible to compare with a Coding instance
        self.assertEqual(
            c1, pmtypes.Coding('42', pmtypes.DefaultCodingSystem, None))

        # if two CodedValue instances are compared, the translations shall also be handled
        c2.Translation.append(pmtypes.T_Translation(41))
        self.assertNotEqual(c2, 41)
        c3 = pmtypes.CodedValue(42)
        c3.Translation.append(
            pmtypes.T_Translation(41))  # same translation as c2
        self.assertEqual(c2, c3)
    def _test_ClockDescriptorContainer(self, cls):
        dc = cls(
            nsmapper=self.nsmapper,
            nodeName=namespaces.domTag('MyDescriptor'),
            handle='123',
            parentHandle='456',
        )
        # create copy with default values
        node = dc.mkNode()
        dc2 = cls.fromNode(nsmapper=self.nsmapper,
                           node=node,
                           parentHandle='467')
        self.assertEqual(dc.TimeProtocol, dc2.TimeProtocol)
        self.assertEqual(dc.Resolution, dc2.Resolution)

        dc.TimeProtocol = [
            pmtypes.CodedValue('abc', 'def'),
            pmtypes.CodedValue('123', '456')
        ]
        dc.Resolution = 3.14
        node = dc.mkNode()
        dc2.updateDescrFromNode(node)
        self.assertEqual(dc.TimeProtocol, dc2.TimeProtocol)
        self.assertEqual(dc.Resolution, dc2.Resolution)
示例#9
0
    def test_RealTimeSampleArrayMetricStateContainer(self):
        dc = descriptorcontainers.RealTimeSampleArrayMetricDescriptorContainer(
            nsmapper=self.nsmapper,
            nodeName='MyDescriptor',
            handle='123',
            parentHandle='456')

        def verifyEqual(origin, copied):
            self.assertEqual(copied.metricValue.Samples,
                             origin.metricValue.Samples)
            self.assertEqual(copied.metricValue.DeterminationTime,
                             origin.metricValue.DeterminationTime)
            self.assertEqual(copied.metricValue.Annotation,
                             origin.metricValue.Annotation)
            self.assertEqual(copied.metricValue.ApplyAnnotations,
                             origin.metricValue.ApplyAnnotations)
            self._verifyAbstractStateContainerDataEqual(copied, origin)

        sc = statecontainers.RealTimeSampleArrayMetricStateContainer(
            nsmapper=self.nsmapper, descriptorContainer=dc, node=None)
        sc.mkMetricValue()
        self.assertEqual(sc.nodeName, namespaces.domTag('State'))
        self.assertTrue(isinstance(sc.metricValue, pmtypes.SampleArrayValue))

        sc.metricValue.Samples = [1, 2, 3, 4, 5.5]
        sc.metricValue.DeterminationTime = 1234567
        sc.metricValue.Annotations = []
        sc.metricValue.ApplyAnnotations = []
        sc.ActivationState = 'act'

        #test creation from node
        node = sc.mkStateNode()
        sc2 = statecontainers.RealTimeSampleArrayMetricStateContainer(
            nsmapper=self.nsmapper, descriptorContainer=dc, node=node)
        verifyEqual(sc, sc2)

        #test update from node
        sc.metricValue.Samples = [5.5, 6.6]
        sc.metricValue.DeterminationTime = 2345678
        sc.metricValue.Annotations = [
            pmtypes.Annotation(pmtypes.CodedValue('a', 'b'))
        ]
        sc.metricValue.ApplyAnnotations = [pmtypes.ApplyAnnotation(1, 2)]

        sc.incrementState()
        node = sc.mkStateNode()
        sc2.updateFromNode(node)
        verifyEqual(sc, sc2)
    def test_AbstractDescriptorContainer(self):
        dc = descriptorcontainers.AbstractDescriptorContainer(
            nsmapper=self.nsmapper,
            nodeName='MyDescriptor',
            handle='123',
            parentHandle='456',
        )

        self.assertEqual(dc.DescriptorVersion, 0)
        self.assertEqual(dc.SafetyClassification, 'Inf')
        self.assertEqual(dc.getActualValue('SafetyClassification'), None)
        self.assertEqual(dc.Type, None)

        #test creation from node
        node = dc.mkNode()
        dc2 = descriptorcontainers.AbstractDescriptorContainer.fromNode(
            nsmapper=self.nsmapper, node=node, parentHandle='467')
        self.assertEqual(dc2.DescriptorVersion, 0)
        self.assertEqual(dc2.SafetyClassification, 'Inf')
        self.assertEqual(dc.Type, None)
        self.assertEqual(dc.ext_Extension, None)

        #test update from node
        dc.DescriptorVersion = 42
        dc.SafetyClassification = 'MedA'
        dc.Type = pmtypes.CodedValue('abc', 'def')

        dc.ext_Extension = etree_.Element(namespaces.extTag('Extension'))
        etree_.SubElement(dc.ext_Extension,
                          'foo',
                          attrib={'someattr': 'somevalue'})
        etree_.SubElement(dc.ext_Extension,
                          'bar',
                          attrib={'anotherattr': 'differentvalue'})
        node = dc.mkNode()
        dc2.updateDescrFromNode(node)

        self.assertEqual(dc2.DescriptorVersion, 42)
        self.assertEqual(dc2.SafetyClassification, 'MedA')
        self.assertEqual(dc2.Type, dc.Type)
        self.assertEqual(dc.codeId, 'abc')
        self.assertEqual(dc.codingSystem, 'def')
        self.assertEqual(dc2.ext_Extension.tag, namespaces.extTag('Extension'))
        self.assertEqual(len(dc2.ext_Extension), 2)
示例#11
0
    def test_AbstractContextStateContainer(self):
        def verifyEqual(origin, copied):
            self.assertEqual(copied.ContextAssociation,
                             origin.ContextAssociation)
            self.assertEqual(copied.BindingMdibVersion,
                             origin.BindingMdibVersion)
            self.assertEqual(copied.UnbindingMdibVersion,
                             origin.UnbindingMdibVersion)
            self.assertEqual(copied.BindingStartTime, origin.BindingStartTime)
            self.assertEqual(copied.BindingEndTime, origin.BindingEndTime)
            self.assertEqual(copied.Validator, origin.Validator)
            self.assertEqual(copied.Identification, origin.Identification)
            self._verifyAbstractStateContainerDataEqual(copied, origin)

        sc = statecontainers.AbstractContextStateContainer(
            nsmapper=self.nsmapper, descriptorContainer=self.dc, node=None)
        self.assertEqual(sc.ContextAssociation, 'No')
        self.assertEqual(sc.BindingMdibVersion, None)
        self.assertEqual(sc.UnbindingMdibVersion, None)
        self.assertEqual(sc.BindingStartTime, None)
        self.assertEqual(sc.BindingEndTime, None)
        self.assertEqual(sc.Validator, [])
        self.assertEqual(sc.Identification, [])

        idents = [
            pmtypes.InstanceIdentifier(
                root='abc',
                type_codedValue=pmtypes.CodedValue('abc', 'def'),
                identifierNames=[pmtypes.LocalizedText('ABC')],
                extensionString='123')
        ]
        sc.Identification = idents
        self.assertEqual(sc.Identification, idents)

        validators = [
            pmtypes.InstanceIdentifier(
                root='ABC',
                type_codedValue=pmtypes.CodedValue('123', '456'),
                identifierNames=[pmtypes.LocalizedText('DEF')],
                extensionString='321')
        ]
        sc.Validator = validators
        self.assertEqual(sc.Validator, validators)

        for value in ('assoc', 'disassoc'):
            sc.ContextAssociation = value
            node = sc.mkStateNode()
            self.assertEqual(node.get('ContextAssociation'), value)

        for value in (12345.123, 67890.987):
            sc.BindingStartTime = value
            sc.BindingEndTime = value + 1
            node = sc.mkStateNode()
            self.assertEqual(
                node.get('BindingStartTime'),
                containerproperties.TimestampConverter.toXML(value))
            self.assertEqual(
                node.get('BindingEndTime'),
                containerproperties.TimestampConverter.toXML(value + 1))

        for value in (0, 42, 123):
            sc.BindingMdibVersion = value
            sc.UnbindingMdibVersion = value + 1
            node = sc.mkStateNode()
            self.assertEqual(node.get('BindingMdibVersion'),
                             containerproperties.IntegerConverter.toXML(value))
            self.assertEqual(
                node.get('UnbindingMdibVersion'),
                containerproperties.IntegerConverter.toXML(value + 1))

        node = etree_.Element(namespaces.domTag('State'),
                              attrib={
                                  'StateVersion': '2',
                                  'DescriptorHandle': '123',
                                  'BindingStartTime': '1234567',
                                  'BindingEndTime': '2345678',
                                  'Handle': sc.Handle
                              })
        sc.updateFromNode(node)
        self.assertEqual(sc.BindingStartTime, 1234.567)
        self.assertEqual(sc.BindingEndTime, 2345.678)
        self.assertEqual(sc.node.get('BindingStartTime'), '1234567')
        self.assertEqual(sc.node.get('BindingEndTime'), '2345678')
        self.assertEqual(sc.Identification, [])
        self.assertEqual(sc.Validator, [])

        #test creation from node
        sc.Identification = idents
        sc.Validator = validators
        node = sc.mkStateNode()
        sc2 = statecontainers.AbstractContextStateContainer(
            nsmapper=self.nsmapper, descriptorContainer=self.dc, node=node)
        verifyEqual(sc, sc2)