etisserant@203: #!/usr/bin/env python
etisserant@203: # -*- coding: utf-8 -*-
etisserant@203: #
etisserant@203: #Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
etisserant@203: #
etisserant@203: #See COPYING file for copyrights details.
etisserant@203: #
etisserant@203: #This library is free software; you can redistribute it and/or
etisserant@203: #modify it under the terms of the GNU General Public
etisserant@203: #License as published by the Free Software Foundation; either
etisserant@203: #version 2.1 of the License, or (at your option) any later version.
etisserant@203: #
etisserant@203: #This library is distributed in the hope that it will be useful,
etisserant@203: #but WITHOUT ANY WARRANTY; without even the implied warranty of
etisserant@203: #MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
etisserant@203: #General Public License for more details.
etisserant@203: #
etisserant@203: #You should have received a copy of the GNU General Public
etisserant@203: #License along with this library; if not, write to the Free Software
etisserant@203: #Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
etisserant@203: 
etisserant@203: # Package initialisation
etisserant@203: 
etisserant@203: from os import listdir, path
etisserant@203: 
laurent@399: 
etisserant@203: _base_path = path.split(__file__)[0]
etisserant@203: 
laurent@399: 
Edouard@733: def _GetLocalConnectorClassFactory(name):
Edouard@733:     return lambda:getattr(__import__(name,globals(),locals()), name + "_connector_factory")
Edouard@733: 
Edouard@733: connectors = {name:_GetLocalConnectorClassFactory(name) 
Edouard@733:                   for name in listdir(_base_path) 
Edouard@733:                       if path.isdir(path.join(_base_path, name)) 
Edouard@733:                           and not name.startswith("__")}
etisserant@203: 
Edouard@717: def ConnectorFactory(uri, confnodesroot):
etisserant@203:     """
etisserant@203:     Return a connector corresponding to the URI
etisserant@203:     or None if cannot connect to URI
etisserant@203:     """
etisserant@203:     servicetype = uri.split("://")[0]
Edouard@733:     if servicetype in connectors:
etisserant@203:         # import module according to uri type
Edouard@733:         connectorclass = connectors[servicetype]()
etisserant@227:     elif servicetype == "LOCAL":
Edouard@733:         from PYRO import PYRO_connector_factory as connectorclass
Edouard@717:         runtime_port = confnodesroot.AppFrame.StartLocalRuntime(taskbaricon=True)
Edouard@733:         uri="PYRO://127.0.0.1:"+str(runtime_port)
etisserant@203:     else :
etisserant@203:         return None    
Edouard@733:     return connectorclass(uri, confnodesroot)
etisserant@203: