commands must be specified explicitely

no more automatic definition by just declaring do_<command>

Change-Id: Ided91b5ae6fe657a6134f1cc14cc6484570a3646
Reviewed-on: https://forge.frm2.tum.de/review/18206
Tested-by: JenkinsCodeReview <bjoern_pedersen@frm2.tum.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
zolliker 2018-06-19 11:16:14 +02:00
parent fc948972cc
commit 5ffe953c5c
2 changed files with 20 additions and 12 deletions

View File

@ -29,8 +29,6 @@ from __future__ import print_function
# from these base classes (how to do this?)
import time
import types
import inspect
try:
from six import add_metaclass # for py2/3 compat
@ -301,16 +299,9 @@ class ModuleMeta(type):
setattr(newtype, 'commands', getattr(newtype, 'commands', {}))
for attrname in attrs:
if attrname.startswith('do_'):
if attrname[3:] in newtype.commands:
continue
value = getattr(newtype, attrname)
if isinstance(value, types.MethodType):
argspec = inspect.getargspec(value)
if argspec[0] and argspec[0][0] == 'self':
del argspec[0][0]
newtype.commands[attrname[3:]] = Command(
getattr(value, '__doc__'), argspec.args,
None) # XXX: how to find resulttype?
if attrname[3:] not in newtype.commands:
raise ProgrammingError('%r: command %r has to be specified '
'explicitly!' % (name, attrname[3:]))
attrs['__constructed__'] = True
return newtype
@ -549,6 +540,15 @@ class Drivable(Writable):
"""
Status = Enum(Readable.Status, BUSY=300)
commands = {
'stop': Command(
'cease driving, go to IDLE state',
arguments=[],
result=None
),
}
overrides = {
'status' : Override(datatype=TupleOf(EnumType(Status), StringType())),
}

View File

@ -173,6 +173,10 @@ class PyTangoDevice(Module):
),
}
commands = {
'reset': Command('Tango reset command', arguments=[], result=None),
}
tango_status_mapping = {
PyTango.DevState.ON: Drivable.Status.IDLE,
PyTango.DevState.ALARM: Drivable.Status.WARN,
@ -646,6 +650,10 @@ class Motor(Actuator):
),
}
commands = {
'reference': Command('Do a reference run', arguments=[], result=None),
}
def read_refpos(self, maxage=0):
return float(self._getProperty('refpos'))