connectors/PYRO/__init__.py
changeset 3884 34da877021d5
parent 3883 a6e7dd8bac36
child 3885 22a009561502
--- a/connectors/PYRO/__init__.py	Sat Dec 09 01:03:43 2023 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-# This file is part of Beremiz, a Integrated Development Environment for
-# programming IEC 61131-3 automates supporting plcopen standard and CanFestival.
-#
-# Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
-#
-# See COPYING file for copyrights details.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
-
-
-from time import sleep
-import copy
-import socket
-import os.path
-
-import Pyro5
-import Pyro5.client
-import Pyro5.errors
-
-# TODO: PSK
-
-import importlib
-
-
-Pyro5.config.SERIALIZER = "msgpack"
-
-
-def PYRO_connector_factory(uri, confnodesroot):
-    """
-    This returns the connector to Pyro style PLCobject
-    """
-    confnodesroot.logger.write(_("PYRO connecting to URI : %s\n") % uri)
-
-    scheme, location = uri.split("://")
-
-    # TODO: use ssl
-
-    schemename = "PYRO"
-
-    # Try to get the proxy object
-    try:
-        RemotePLCObjectProxy = Pyro5.client.Proxy(f"{schemename}:PLCObject@{location}")
-    except Exception as e:
-        confnodesroot.logger.write_error(
-            _("Connection to {loc} failed with exception {ex}\n").format(
-                loc=location, ex=str(e)))
-        return None
-
-    RemotePLCObjectProxy._pyroTimeout = 60
-
-    class MissingCallException(Exception):
-        pass
-
-    def PyroCatcher(func, default=None):
-        """
-        A function that catch a Pyro exceptions, write error to logger
-        and return default value when it happen
-        """
-        def catcher_func(*args, **kwargs):
-            try:
-                return func(*args, **kwargs)
-            except Pyro5.errors.ConnectionClosedError as e:
-                confnodesroot._SetConnector(None)
-                confnodesroot.logger.write_error(_("Connection lost!\n"))
-            except Pyro5.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:
-                errmess = ''.join(Pyro5.errors.get_pyro_traceback())
-                confnodesroot.logger.write_error(errmess + "\n")
-                print(errmess)
-                confnodesroot._SetConnector(None)
-            return default
-        return catcher_func
-
-    # Check connection is effective.
-    # lambda is for getattr of GetPLCstatus to happen inside catcher
-    IDPSK = PyroCatcher(RemotePLCObjectProxy.GetPLCID)()
-    if IDPSK is None:
-        confnodesroot.logger.write_warning(_("PLC did not provide identity and security infomation.\n"))
-    else:
-        ID, secret = IDPSK
-        PSK.UpdateID(confnodesroot.ProjectPath, ID, secret, uri)
-
-    class PyroProxyProxy(object):
-        """
-        A proxy proxy class to handle Beremiz Pyro interface specific behavior.
-        And to put Pyro exception catcher in between caller and Pyro proxy
-        """
-        def __getattr__(self, attrName):
-            member = self.__dict__.get(attrName, None)
-            if member is None:
-                def my_local_func(*args, **kwargs):
-                    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
-
-    return PyroProxyProxy