--- 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