def test_setData_scalar(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) device = 'stestp09/testss/s1r228' proxy = PyTango.DeviceProxy(device) self.assertTrue(ProxyHelper.wait(proxy, 10000)) arr1 = { "ScalarBoolean": ["bool", "DevBoolean", True], "ScalarUChar": ["uint8", "DevUChar", 23], "ScalarShort": ["int16", "DevShort", -123], "ScalarUShort": ["uint16", "DevUShort", 1234], "ScalarLong": ["int64", "DevLong", -124], "ScalarULong": ["uint64", "DevULong", 234], "ScalarLong64": ["int64", "DevLong64", 234], "ScalarULong64": ["uint64", "DevULong64", 23], "ScalarFloat": ["float32", "DevFloat", 12.234, 1e-5], "ScalarDouble": ["float64", "DevDouble", -2.456673e+02, 1e-14], "ScalarString": ["string", "DevString", "MyTrue"], } arr2 = { "State": ["string", "DevState", PyTango._PyTango.DevState.ON], } arr3 = { "ScalarEncoded": [ "string", "DevEncoded", ("UTF8", b"Hello UTF8! Pr\xc3\xb3ba \xe6\xb5\x8b") ], "SpectrumEncoded": [ "string", "DevEncoded", ('INT32', b'\xd2\x04\x00\x00.\x16\x00\x00-' b'\x00\x00\x00Y\x01\x00\x00') ], } for k in arr1: self._simps.dp.write_attribute(k, arr1[k][2]) arr = dict(arr1, **(arr2)) for k in arr: mb = TgMember(k) da = proxy.read_attribute(k) mb.setData(da) dt = mb.getValue() self.checkData(dt, "SCALAR", arr[k][2], arr[k][1], [1, 0], None, None, arr[k][3] if len(arr[k]) > 3 else 0) if not PYTG_BUG_213: for k in arr3: mb = TgMember(k, encoding=arr3[k][2][0]) da = proxy.read_attribute(k) mb.setData(da) dp = DecoderPool() dt = mb.getValue(dp) self.checkData(dt, "SCALAR", arr3[k][2], arr3[k][1], [1, 0], arr3[k][2][0], dp)
def test_constructor_encode(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) dp = DecoderPool() spectrum = numpy.array([1234, 5678, 45, 345], dtype=numpy.uint32) image = numpy.array( [[2, 5, 4, 6], [3, 4, 3, 4], [3, 6, 7, 8]], dtype='uint8') arr = { "ScalarEncoded": [ "UTF8", "DevEncoded", ("UTF8", b"Hello UTF8! Pr\xc3\xb3ba \xe6\xb5\x8b"), [1, 0], "SCALAR", b"Hello UTF8! Pr\xc3\xb3ba \xe6\xb5\x8b", "DevString"], "SpectrumEncoded": [ "UINT32", "DevEncoded", ('INT32', b'\xd2\x04\x00\x00.\x16\x00\x00-\x00\x00\x00Y\x01\x00\x00'), [4, 0], "SPECTRUM", spectrum, "DevULong"], "ImageEncoded": ["LIMA_VIDEO_IMAGE", "DevEncoded", self.encodeImage(image), list(image.shape), "IMAGE", image, "DevUChar"], } for a in arr: data = {"rank": "SCALAR", "value": arr[a][2], "tangoDType": arr[a][1], "shape": [1, 0], "encoding": arr[a][0], "decoders": dp} el = DataHolder(**data) self.assertTrue(isinstance(el, object)) self.assertEqual(el.format, arr[a][4]) self.assertEqual(el.tangoDType, arr[a][6]) self.assertEqual(el.shape, arr[a][3]) self.assertEqual(el.encoding, data["encoding"]) self.assertEqual(el.decoders, data["decoders"]) if el.shape == [1, 0]: self.assertEqual(el.value, arr[a][5]) elif len(el.shape) == 2 and el.shape[1] == 0: self.assertEqual(len(el.value), len(arr[a][5])) self.assertEqual(len(el.value), el.shape[0]) for i in range(el.shape[0]): self.assertEqual(el.value[i], arr[a][5][i]) elif len(el.shape) == 2 and el.shape[1] != 0: self.assertEqual(len(el.value), len(arr[a][5])) self.assertEqual(len(el.value), el.shape[0]) for i in range(el.shape[0]): self.assertEqual(len(el.value[i]), len(arr[a][5][i])) self.assertEqual(len(el.value[i]), el.shape[1]) for j in range(el.shape[1]): self.assertEqual(el.value[i][j], arr[a][5][i][j]) else: print("WARNING %s %s" % (a, "Case not supported"))
def test_constructor_default(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) el = DecoderPool() self.assertTrue(isinstance(el, object)) el = DecoderPool(json.loads("{}")) self.assertTrue(isinstance(el, object)) jsn = json.loads('{"decoders":{"UTF":"nxswriter.DecoderPool.Decode"}}') self.myAssertRaise(AttributeError, DecoderPool, jsn) jsn = json.loads('{"decoders":{"UTF":"DDecoderPool.UTF8decoder"}}') self.myAssertRaise(ImportError, DecoderPool, jsn) el = DecoderPool( json.loads( '{"decoders":{"UTF":"nxswriter.DecoderPool.UTF8decoder"}}'))
def test_constructor_encode_single(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) dp = DecoderPool() spectrum = numpy.array([1234], dtype=numpy.uint32) image = numpy.array([[2]], dtype='uint16') arr = { "ScalarEncoded": ["UTF8", "DevEncoded", ("UTF8", b"\xc3\xb3"), [1, 0], "SCALAR", b"\xc3\xb3", "DevString"], "SpectrumEncoded": ["UINT32", "DevEncoded", ('INT32', b'\xd2\x04\x00\x00'), [1, 0], "SPECTRUM", spectrum, "DevULong"], "ImageEncoded": ["LIMA_VIDEO_IMAGE", "DevEncoded", self.encodeImage(image), list(image.shape), "IMAGE", image, "DevUShort"], } for a in arr: data = {"rank": "SCALAR", "value": arr[a][2], "tangoDType": arr[a][1], "shape": [1, 0], "encoding": arr[a][0], "decoders": dp} el = DataHolder(**data) self.assertTrue(isinstance(el, object)) self.assertEqual(el.format, arr[a][4]) self.assertEqual(el.tangoDType, arr[a][6]) self.assertEqual(el.shape, arr[a][3]) self.assertEqual(el.encoding, data["encoding"]) self.assertEqual(el.decoders, data["decoders"]) self.assertEqual(el.value, arr[a][5])
def test_setDecoders_nopool(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) device = 'stestp09/testss/s1r228' atype = 'attribute' # encoding = 'UTF8' # decoders = DecoderPool() atts = {"type": "TANGO"} # name = "myRecord" # wjson = json.loads( # '{"datasources":{"CL":"nxswriter.ClientSource.ClientSource"}}') gjson = json.loads('{"data":{"myRecord":"1"}}') arr3 = { "ScalarEncoded": [ "string", "DevEncoded", ("UTF8", b"Hello UTF8! Pr\xc3\xb3ba \xe6\xb5\x8b")], "SpectrumEncoded": [ "string", "DevEncoded", ('INT32', b'\xd2\x04\x00\x00.\x16\x00\x00-\x00\x00\x00Y\x01\x00\x00')], } for k in arr3: el = EField(self._fattrs, None) ds = DataSourceFactory(atts, el) self.assertTrue(isinstance(ds, Element)) self.assertEqual(ds.tagName, "datasource") self.assertEqual(ds._tagAttrs, atts) self.assertEqual(ds.content, []) self.assertEqual(ds.doc, "") self.assertEqual(ds.last, el) self.assertEqual(ds.setDataSources(DataSourcePool()), None) self.assertEqual(ds.store( ["<datasource type='TANGO'>", "<record name='%s'/> <device name='%s' encoding='%s'/>" % ( k, device, arr3[k][2][0]), "</datasource>"], gjson), None) self.assertEqual(type(ds.last.source), TangoSource.TangoSource) self.assertEqual(ds.last.source.member.name, k) self.assertEqual(ds.last.source.device, device) self.assertEqual(ds.last.source.member.encoding, arr3[k][2][0]) self.assertEqual( ds.last.source.__str__(), " TANGO Device %s : %s (%s)" % (device, k, atype)) self.assertEqual(len(ds.last.tagAttributes), 1) self.assertEqual(ds.last.tagAttributes["nexdatas_source"], ( 'NX_CHAR', "<datasource type='TANGO'><record name='%s'/> " "<device name='stestp09/testss/s1r228' encoding='%s'/>" "</datasource>" % (k, arr3[k][2][0]))) # dp = DecoderPool() self.assertEqual(ds.setDecoders(None), None) dt = ds.last.source.getData() self.checkData(dt, "SCALAR", arr3[k][2], arr3[k][1], [1, 0], arr3[k][2][0], None)
def test_check_flow(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) atts = {"type": "CL"} name = "myRecord" if "test.TstDataSource" in sys.modules.keys(): wjson = json.loads('{"datasources":{' '"CL":"test.TstDataSource.TstDataSource"}}') else: wjson = json.loads('{"datasources":{' '"CL":"TstDataSource.TstDataSource"}}') gjson = json.loads('{"data":{"myRecord":1123}}') el = EField(self._fattrs, None) ds = DataSourceFactory(atts, el) self.assertTrue(isinstance(ds, Element)) self.assertEqual(ds.tagName, "datasource") self.assertEqual(ds._tagAttrs, atts) self.assertEqual(ds.content, []) self.assertEqual(ds.doc, "") self.assertEqual(ds.last, el) dsp = DataSourcePool(wjson) dcp = DecoderPool() self.assertEqual(ds.setDataSources(dsp), None) self.assertEqual( ds.store([ "<datasource type='CL'>", """ <datasource type="CLIENT" name="myclient"> <record name="%s"/> </datasource> <result> ds.result = ds.myclient + 1 </result> """ % name, "</datasource>" ], gjson), None) td = ds.last.source self.assertEqual(len(td.stack), 7) self.assertEqual(td.stack[0], "setup") self.assertEqual( td.stack[1], '<datasource type=\'CL\'>\n' '<datasource type="CLIENT" name="myclient">\n ' '<record name="myRecord"/>\n</datasource>\n' '<result>\nds.result = ds.myclient + 1\n</result>\n' '</datasource>') self.assertEqual(td.stack[2], 'setJSON') self.assertEqual(td.stack[3], {u'data': {u'myRecord': 1123}}) self.assertEqual(td.stack[4], None) self.assertEqual(td.stack[5], "setDataSources") self.assertEqual(td.stack[6], dsp) ds.setDecoders(dcp) self.assertEqual(len(td.stack), 10) self.assertEqual(td.stack[7], "isValid") self.assertEqual(td.stack[8], "setDecoders") self.assertEqual(td.stack[9], dcp) self.assertEqual(type(ds.last.source), TstDataSource.TstDataSource) self.assertEqual(ds.last.source.__str__(), "Test DataSource") self.assertEqual(len(td.stack), 11) self.assertEqual(td.stack[10], '__str__') self.assertEqual(len(ds.last.tagAttributes), 1) self.assertEqual( ds.last.tagAttributes["nexdatas_source"], ('NX_CHAR', '<datasource type=\'CL\'>\n<datasource type="CLIENT" ' 'name="myclient">\n <record name="myRecord"/>\n' '</datasource>\n<result>\nds.result = ds.myclient + 1\n</result>' '\n</datasource>')) dt = ds.last.source.getData() self.assertEqual(len(td.stack), 12) self.assertEqual(td.stack[11], 'getData') self.checkData(dt, "SCALAR", 1, "DevLong", [0, 0])
def test_getData_scalar(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) arr1 = { "ScalarBoolean": ["bool", "DevBoolean", True], "ScalarUChar": ["uint8", "DevUChar", 23], "ScalarShort": ["int16", "DevShort", -123], "ScalarUShort": ["uint16", "DevUShort", 1234], "ScalarLong": ["int64", "DevLong", -124], "ScalarULong": ["uint64", "DevULong", 234], "ScalarLong64": ["int64", "DevLong64", 234], "ScalarULong64": ["uint64", "DevULong64", 23], "ScalarFloat": ["float32", "DevFloat", 12.234, 1e-5], "ScalarDouble": ["float64", "DevDouble", -2.456673e+02, 1e-14], "ScalarString": ["string", "DevString", "MyTrue"], } arr1b = { "ScalarBoolean": ["bool", "DevBoolean", False], "ScalarUChar": ["uint8", "DevUChar", 13], "ScalarShort": ["int16", "DevShort", -112], "ScalarUShort": ["uint16", "DevUShort", 2345], "ScalarLong": ["int64", "DevLong", -255], "ScalarULong": ["uint64", "DevULong", 123], "ScalarLong64": ["int64", "DevLong64", 214], "ScalarULong64": ["uint64", "DevULong64", 244465], "ScalarFloat": ["float32", "DevFloat", 11.123, 1e-5], "ScalarDouble": ["float64", "DevDouble", -1.414532e+02, 1e-14], "ScalarString": ["string", "DevString", "MyFalse"], } arr2 = { "State": ["string", "DevState", PyTango._PyTango.DevState.ON], } arr3 = { "ScalarEncoded": [ "string", "DevEncoded", ("UTF8", b"Hello UTF8! Pr\xc3\xb3ba \xe6\xb5\x8b") ], "SpectrumEncoded": [ "string", "DevEncoded", ('INT32', b'\xd2\x04\x00\x00.\x16\x00\x00-\x00\x00\x00Y\x01\x00\x00') ], } counter = self.__rnd.randint(-2, 10) for k in arr1: self._simps.dp.write_attribute(k, arr1[k][2]) for k in arr1b: self._simps2.dp.write_attribute(k, arr1b[k][2]) arr = dict(arr1, **(arr2)) arrb = dict(arr1b, **(arr2)) dvn = 'stestp09/testss/s1r228' dvn2 = 'stestp09/testss/s2r228' gr = TgGroup(-100) dv = gr.getDevice(dvn) dv2 = gr.getDevice(dvn2) flip = True for k in arr: mb = TgMember(k) if flip: dv.setMember(mb) else: dv2.setMember(mb) flip = not flip if not PYTG_BUG_213: flip = True for k in arr3: mb = TgMember(k, encoding=arr3[k][2][0]) if flip: dv.setMember(mb) else: dv2.setMember(mb) flip = not flip print("FETCH %s" % counter) gr.getData(counter) print("FETCH END") for k in arr1: self._simps.dp.write_attribute(k, arr1b[k][2]) for k in arr1b: self._simps2.dp.write_attribute(k, arr1[k][2]) flip = True for k in arr: if flip: dt = (gr.getDevice(dvn).members[k]).getValue() self.checkData(dt, "SCALAR", arr[k][2], arr[k][1], [1, 0], None, None, arr[k][3] if len(arr[k]) > 3 else 0) else: dt = (gr.getDevice(dvn2).members[k]).getValue() self.checkData(dt, "SCALAR", arrb[k][2], arrb[k][1], [1, 0], None, None, arrb[k][3] if len(arr[k]) > 3 else 0) flip = not flip gr.getData(counter) flip = True for k in arr: if flip: dt = (gr.getDevice(dvn).members[k]).getValue() self.checkData(dt, "SCALAR", arr[k][2], arr[k][1], [1, 0], None, None, arr[k][3] if len(arr[k]) > 3 else 0) else: dt = (gr.getDevice(dvn2).members[k]).getValue() self.checkData(dt, "SCALAR", arrb[k][2], arrb[k][1], [1, 0], None, None, arrb[k][3] if len(arr[k]) > 3 else 0) flip = not flip gr.getData(counter + 1) flip = True for k in arr: if flip: dt = (gr.getDevice(dvn).members[k]).getValue() self.checkData(dt, "SCALAR", arrb[k][2], arrb[k][1], [1, 0], None, None, arrb[k][3] if len(arr[k]) > 3 else 0) else: dt = (gr.getDevice(dvn2).members[k]).getValue() self.checkData(dt, "SCALAR", arr[k][2], arr[k][1], [1, 0], None, None, arr[k][3] if len(arr[k]) > 3 else 0) flip = not flip if not PYTG_BUG_213: dp = DecoderPool() flip = True for k in arr3: print(k) if flip: print(gr.getDevice(dvn).members[k]) dt = (gr.getDevice(dvn).members[k]).getValue(dp) else: print(gr.getDevice(dvn2).members[k]) dt = (gr.getDevice(dvn2).members[k]).getValue(dp) self.checkData(dt, "SCALAR", arr3[k][2], arr3[k][1], [1, 0], arr3[k][2][0], dp) flip = not flip
def test_pop(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) el = DecoderPool() el.pop("CL") ds = el.get("UTF8") self.assertTrue(isinstance(ds, UTF8decoder)) ds = el.get("UINT32") self.assertTrue(isinstance(ds, UINT32decoder)) ds = el.get("LIMA_VIDEO_IMAGE") self.assertTrue(isinstance(ds, VDEOdecoder)) el.pop("UINT32") ds = el.get("UTF8") self.assertTrue(isinstance(ds, UTF8decoder)) self.assertEqual(el.get("UINT32"), None) ds = el.get("LIMA_VIDEO_IMAGE") self.assertTrue(isinstance(ds, VDEOdecoder)) self.assertEqual(el.get("DDB"), None) self.assertEqual(el.get("CL"), None) el = DecoderPool() el.append(W4DS, "W0") ds = el.get("W0") self.assertTrue(isinstance(ds, W4DS)) ds = el.get("UTF8") self.assertTrue(isinstance(ds, UTF8decoder)) ds = el.get("UINT32") self.assertTrue(isinstance(ds, UINT32decoder)) ds = el.get("LIMA_VIDEO_IMAGE") self.assertTrue(isinstance(ds, VDEOdecoder)) el.pop("W0") el.pop("UINT32") ds = el.get("UTF8") self.assertTrue(isinstance(ds, UTF8decoder)) self.assertEqual(el.get("UINT32"), None) ds = el.get("LIMA_VIDEO_IMAGE") self.assertTrue(isinstance(ds, VDEOdecoder)) self.assertEqual(el.get("DDB"), None) self.assertEqual(el.get("W0"), None)
def test_get(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) el = DecoderPool() ds = el.get("UTF8") self.assertTrue(isinstance(ds, UTF8decoder)) ds = el.get("UINT32") self.assertTrue(isinstance(ds, UINT32decoder)) ds = el.get("LIMA_VIDEO_IMAGE") self.assertTrue(isinstance(ds, VDEOdecoder)) self.assertEqual(el.get("DDB"), None) self.assertEqual(el.get("CL"), None) el = DecoderPool( json.loads( '{"decoders":{"UTF":"nxswriter.DecoderPool.UTF8decoder"}}')) ds = el.get("UTF8") self.assertTrue(isinstance(ds, UTF8decoder)) ds = el.get("UINT32") self.assertTrue(isinstance(ds, UINT32decoder)) ds = el.get("LIMA_VIDEO_IMAGE") self.assertTrue(isinstance(ds, VDEOdecoder)) self.assertEqual(el.get("DDB"), None) ds = el.get("UTF") self.assertTrue(isinstance(ds, UTF8decoder))
def test_hasDecoder(self): fun = sys._getframe().f_code.co_name print("Run: %s.%s() " % (self.__class__.__name__, fun)) el = DecoderPool() self.assertTrue(el.hasDecoder("UTF8")) self.assertTrue(el.hasDecoder("UINT32")) self.assertTrue(el.hasDecoder("LIMA_VIDEO_IMAGE")) self.assertTrue(not el.hasDecoder("DBB")) self.assertTrue(not el.hasDecoder("CL")) el = DecoderPool( json.loads( '{"decoders":{"UTF":"nxswriter.DecoderPool.UTF8decoder"}}')) self.assertTrue(el.hasDecoder("UTF8")) self.assertTrue(el.hasDecoder("UINT32")) self.assertTrue(el.hasDecoder("LIMA_VIDEO_IMAGE")) self.assertTrue(not el.hasDecoder("DBB")) self.assertTrue(el.hasDecoder("UTF"))