From: Carlos P. <cpa...@ce...> - 2015-12-03 14:28:58
|
Patch applied to taurus4-preview after several modifications (to support non-scalars and fix some logical errors) On Wed 2 December 2015 16:27:26 cfalcon wrote: > 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, -- +----------------------------------------------------+ Carlos Pascual Izarra Scientific Software Coordinator Computing Division ALBA Synchrotron [http://www.albasynchrotron.es] Carrer de la Llum 2-26 E-08290 Cerdanyola del Valles (Barcelona), Spain E-mail: cpa...@ce... Phone: +34 93 592 4428 +----------------------------------------------------+ |