[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