connectors/PYRO/__init__.py
changeset 3861 7e17f7e02a2b
parent 2622 e10a1095f577
child 3881 0b3ac94f494c
--- a/connectors/PYRO/__init__.py	Fri Nov 24 12:16:19 2023 +0100
+++ b/connectors/PYRO/__init__.py	Wed Nov 29 11:54:56 2023 +0100
@@ -38,7 +38,6 @@
 
 import PSKManagement as PSK
 from connectors.PYRO.PSK_Adapter import setupPSKAdapter
-from runtime import PlcStatus
 
 
 def switch_pyro_adapter(use_ssl):
@@ -88,6 +87,9 @@
 
     RemotePLCObjectProxy.adapter.setTimeout(60)
 
+    class MissingCallException(Exception):
+        pass
+
     def PyroCatcher(func, default=None):
         """
         A function that catch a Pyro exceptions, write error to logger
@@ -101,6 +103,8 @@
                 confnodesroot.logger.write_error(_("Connection lost!\n"))
             except Pyro.errors.ProtocolError as e:
                 confnodesroot.logger.write_error(_("Pyro exception: %s\n") % e)
+            except MissingCallException as e:
+                confnodesroot.logger.write_warning(_("Remote call not supported: %s\n") % e.message)
             except Exception as e:
                 # confnodesroot.logger.write_error(traceback.format_exc())
                 errmess = ''.join(Pyro.util.getPyroTraceback(e))
@@ -119,13 +123,6 @@
         ID, secret = IDPSK
         PSK.UpdateID(confnodesroot.ProjectPath, ID, secret, uri)
 
-    _special_return_funcs = {
-        "StartPLC": False,
-        "GetTraceVariables": (PlcStatus.Broken, None),
-        "GetPLCstatus": (PlcStatus.Broken, None),
-        "RemoteExec": (-1, "RemoteExec script failed!")
-    }
-
     class PyroProxyProxy(object):
         """
         A proxy proxy class to handle Beremiz Pyro interface specific behavior.
@@ -135,8 +132,12 @@
             member = self.__dict__.get(attrName, None)
             if member is None:
                 def my_local_func(*args, **kwargs):
-                    return RemotePLCObjectProxy.__getattr__(attrName)(*args, **kwargs)
-                member = PyroCatcher(my_local_func, _special_return_funcs.get(attrName, None))
+                    call = RemotePLCObjectProxy.__getattr__(attrName)
+                    if call is None:
+                        raise MissingCallException(attrName)
+                    else:
+                        return call(*args, **kwargs)
+                member = PyroCatcher(my_local_func, self.PLCObjDefaults.get(attrName, None))
                 self.__dict__[attrName] = member
             return member