diff -r 28e9d479aa65 -r de4ee16f7c6c connectors/__init__.py --- 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) -