|
From: cfalcon <cf...@ce...> - 2015-12-02 15:27:35
|
TangoAttribute raises a TypeError: "an integer is required" when you
try to write in a DevUChar attribute.
PyTango expects an int value while Taurus is trying to write a str value.
Fix it. Changing the Taurus type uses for DevUChar TangoAttributes.
The Tango decode method returns for a chr of the reading value, and the
encode method returns the ord.
---
lib/taurus/core/tango/enums.py | 4 ++--
lib/taurus/core/tango/tangoattribute.py | 10 +++++++++-
lib/taurus/core/tango/util/tango_taurus.py | 2 +-
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/lib/taurus/core/tango/enums.py b/lib/taurus/core/tango/enums.py
index 9b46948..7e41158 100644
--- a/lib/taurus/core/tango/enums.py
+++ b/lib/taurus/core/tango/enums.py
@@ -70,7 +70,7 @@ EVENT_TO_POLLING_EXCEPTIONS = ('API_AttributePollingNotStarted',
FROM_TANGO_TO_NUMPY_TYPE = {
PyTango.DevBoolean : numpy.bool8,
- PyTango.DevUChar : numpy.ubyte,
+ PyTango.DevUChar : numpy.uint8,
PyTango.DevShort : numpy.short,
PyTango.DevUShort : numpy.ushort,
PyTango.DevLong : numpy.int32,
@@ -84,7 +84,7 @@ FROM_TANGO_TO_NUMPY_TYPE = {
FROM_TANGO_TO_STR_TYPE = {
PyTango.DevBoolean : 'bool8',
- PyTango.DevUChar : 'ubyte',
+ PyTango.DevUChar : 'uint8',
PyTango.DevShort : 'short',
PyTango.DevUShort : 'ushort',
PyTango.DevLong : 'int32',
diff --git a/lib/taurus/core/tango/tangoattribute.py b/lib/taurus/core/tango/tangoattribute.py
index 2067a96..27560f0 100755
--- a/lib/taurus/core/tango/tangoattribute.py
+++ b/lib/taurus/core/tango/tangoattribute.py
@@ -112,6 +112,9 @@ class TangoAttrValue(TaurusAttrValue):
rvalue = Quantity(rvalue, units=units)
if wvalue is not None:
wvalue = Quantity(wvalue, units=units)
+ if p.type == PyTango.CmdArgType.DevUChar:
+ rvalue = chr(rvalue)
+ wvalue = chr(wvalue)
if isinstance(rvalue, PyTango._PyTango.DevState):
rvalue = DevState[str(rvalue)]
@@ -357,7 +360,12 @@ class TangoAttribute(TaurusAttribute):
except:
attrvalue = str(magnitude).lower() == 'true'
elif tgtype == PyTango.CmdArgType.DevUChar:
- attrvalue = chr(magnitude)
+ try:
+ magnitude = chr(int(magnitude))
+ except ValueError:
+ pass
+ finally:
+ attrvalue = ord(magnitude)
elif tgtype in (PyTango.CmdArgType.DevState,
PyTango.CmdArgType.DevEncoded):
attrvalue = magnitude
diff --git a/lib/taurus/core/tango/util/tango_taurus.py b/lib/taurus/core/tango/util/tango_taurus.py
index 81c8dc4..04e4ede 100644
--- a/lib/taurus/core/tango/util/tango_taurus.py
+++ b/lib/taurus/core/tango/util/tango_taurus.py
@@ -60,7 +60,7 @@ FROM_TANGO_TO_TAURUS_TYPE = {PyTango.CmdArgType.DevVoid:None,
PyTango.CmdArgType.DevState:DataType.DevState,
PyTango.CmdArgType.ConstDevString:DataType.String,
PyTango.CmdArgType.DevVarBooleanArray:DataType.Boolean,
- PyTango.CmdArgType.DevUChar:DataType.Integer, # maybe should be Bytes?
+ PyTango.CmdArgType.DevUChar:DataType.Bytes,
PyTango.CmdArgType.DevLong64:DataType.Integer,
PyTango.CmdArgType.DevULong64:DataType.Integer,
PyTango.CmdArgType.DevVarLong64Array:DataType.Integer,
--
2.4.0
|