connectors/__init__.py
changeset 1475 de4ee16f7c6c
parent 1455 4ba27ed51e48
child 1571 486f94a8032c
--- a/connectors/__init__.py	Sat Dec 06 19:31:51 2014 +0000
+++ b/connectors/__init__.py	Wed Oct 21 15:00:32 2015 +0100
@@ -1,23 +1,23 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 #
-#Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
+# Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
 #
-#See COPYING file for copyrights details.
+# See COPYING file for copyrights details.
 #
-#This library 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.1 of the License, or (at your option) any later version.
+# This library 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.1 of the License, or (at your option) any later version.
 #
-#This library 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.
+# This library 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 library; if not, write to the Free Software
-#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# You should have received a copy of the GNU General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 # Package initialisation
 
@@ -28,27 +28,35 @@
 
 
 def _GetLocalConnectorClassFactory(name):
-    return lambda:getattr(__import__(name,globals(),locals()), name + "_connector_factory")
+    return lambda: getattr(__import__(name, globals(), locals()), name + "_connector_factory")
 
-connectors = {name:_GetLocalConnectorClassFactory(name) 
-                  for name in listdir(_base_path) 
-                      if path.isdir(path.join(_base_path, name)) 
+connectors = {name:_GetLocalConnectorClassFactory(name)
+                  for name in listdir(_base_path)
+                      if path.isdir(path.join(_base_path, name))
                           and not name.startswith("__")}
 
+
 def ConnectorFactory(uri, confnodesroot):
     """
     Return a connector corresponding to the URI
     or None if cannot connect to URI
     """
-    servicetype = uri.split("://")[0]
-    if servicetype in connectors:
-        # import module according to uri type
-        connectorclass = connectors[servicetype]()
-    elif servicetype == "LOCAL":
-        from PYRO import PYRO_connector_factory as connectorclass
-        runtime_port = confnodesroot.AppFrame.StartLocalRuntime(taskbaricon=True)
-        uri="PYRO://127.0.0.1:"+str(runtime_port)
-    else :
-        return None    
+    servicetype = uri.split("://")[0].upper()
+    if servicetype == "LOCAL":
+        # Local is special case
+        # pyro connection to local runtime
+        # started on demand, listening on random port
+        servicetype = "PYRO"
+        runtime_port = confnodesroot.AppFrame.StartLocalRuntime(
+            taskbaricon=True)
+        uri = "PYROLOC://127.0.0.1:" + str(runtime_port)
+    elif servicetype in connectors:
+        pass
+    elif servicetype[-1] == 'S' and servicetype[:-1] in connectors:
+        servicetype = servicetype[:-1]
+    else:
+        return None
+
+    # import module according to uri type
+    connectorclass = connectors[servicetype]()
     return connectorclass(uri, confnodesroot)
-