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: import PYRO laurent@399: etisserant@203: _base_path = path.split(__file__)[0] etisserant@203: laurent@399: connector_types = [name for name in listdir(_base_path) laurent@399: if path.isdir(path.join(_base_path, name)) Edouard@591: and name.lower() != ".hg" laurent@399: and not name.startswith("__")] laurent@399: laurent@399: # a dict from a URI scheme (connector name) to connector module laurent@399: connector_modules = {} laurent@399: laurent@399: # a dict from a DNS-SD service type to a connector module that support it laurent@399: dnssd_connectors = {} laurent@399: laurent@399: for t in connector_types: laurent@399: new_module = getattr(__import__("connectors." + t), t) laurent@399: connector_modules[t] = new_module laurent@399: laurent@399: if hasattr(new_module, "supported_dnssd_services"): laurent@399: for st in new_module.supported_dnssd_services: laurent@399: dnssd_connectors[st] = new_module 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] etisserant@203: if servicetype in connector_types: etisserant@203: # import module according to uri type laurent@399: connectormodule = connector_modules[servicetype] etisserant@203: factoryname = servicetype + "_connector_factory" Edouard@717: return getattr(connectormodule, factoryname)(uri, confnodesroot) etisserant@227: elif servicetype == "LOCAL": Edouard@717: runtime_port = confnodesroot.AppFrame.StartLocalRuntime(taskbaricon=True) etisserant@227: return PYRO.PYRO_connector_factory( etisserant@290: "PYRO://127.0.0.1:"+str(runtime_port), Edouard@717: confnodesroot) etisserant@203: else : etisserant@203: return None etisserant@203: