[pytango] 438/483: If callable doesn't receive arguments export as command arg_in=DEV_VOID
Sandor Bodo-Merle
sbodomerle-guest at moszumanska.debian.org
Thu Sep 28 19:15:10 UTC 2017
This is an automated email from the git hooks/post-receive script.
sbodomerle-guest pushed a commit to annotated tag bliss_8.10
in repository pytango.
commit 44f61ea19d457aa3f63ecddd100aa90fe095258d
Author: coutinho <coutinho at esrf.fr>
Date: Fri Jan 23 09:03:28 2015 +0100
If callable doesn't receive arguments export as command arg_in=DEV_VOID
---
src/boost/python/server.py | 45 ++++++++++++++++++++++++++++++++-------------
1 file changed, 32 insertions(+), 13 deletions(-)
diff --git a/src/boost/python/server.py b/src/boost/python/server.py
index 9472998..4d424d4 100644
--- a/src/boost/python/server.py
+++ b/src/boost/python/server.py
@@ -1185,9 +1185,9 @@ def create_tango_class(server, obj, tango_class_name=None, member_filter=None):
TangoClassName = tango_class_name
def __init__(self, tango_class_obj, name):
- Device.__init__(self, tango_class_obj, name)
- tango_object = server.get_tango_object(self.get_name())
+ tango_object = server.get_tango_object(name)
self.__tango_object = weakref.ref(tango_object)
+ Device.__init__(self, tango_class_obj, name)
def init_device(self):
Device.init_device(self)
@@ -1221,15 +1221,35 @@ def create_tango_class(server, obj, tango_class_name=None, member_filter=None):
log.debug("filtered out %s from %s", name, tango_class_name)
continue
if inspect.isroutine(member):
- def _command(dev, param, func_name=None):
- obj = dev._object
- args, kwargs = loads(*param)
- f = getattr(obj, func_name)
- if server.runner:
- result = server.runner.execute(f, *args, **kwargs)
- else:
- result = f(*args, **kwargs)
- return server.dumps(result)
+ # try to find out if there are any parameters
+ in_type = CmdArgType.DevEncoded
+ out_type = CmdArgType.DevEncoded
+ try:
+ arg_spec = inspect.getargspec(member)
+ if not arg_spec.args:
+ in_type = CmdArgType.DevVoid
+ except TypeError:
+ pass
+
+ if in_type == CmdArgType.DevVoid:
+ def _command(dev, func_name=None):
+ obj = dev._object
+ f = getattr(obj, func_name)
+ if server.runner:
+ result = server.runner.execute(f)
+ else:
+ result = f()
+ return server.dumps(result)
+ else:
+ def _command(dev, param, func_name=None):
+ obj = dev._object
+ args, kwargs = loads(*param)
+ f = getattr(obj, func_name)
+ if server.runner:
+ result = server.runner.execute(f, *args, **kwargs)
+ else:
+ result = f(*args, **kwargs)
+ return server.dumps(result)
cmd = functools.partial(_command, func_name=name)
cmd.__name__ = name
doc = member.__doc__
@@ -1239,8 +1259,7 @@ def create_tango_class(server, obj, tango_class_name=None, member_filter=None):
cmd = types.MethodType(cmd, None, DeviceDispatcher)
setattr(DeviceDispatcher, name, cmd)
DeviceDispatcherClass.cmd_list[name] = \
- [[CmdArgType.DevEncoded, doc],
- [CmdArgType.DevEncoded, ""]]
+ [[in_type, doc], [out_type, ""]]
else:
read_only = False
if hasattr(obj_klass, name):
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/pytango.git
More information about the debian-science-commits
mailing list