connectors/__init__.py
changeset 2492 7dd551ac2fa0
parent 2478 733d77bf0aa7
child 2522 1378c18402c3
equal deleted inserted replaced
2491:362039519454 2492:7dd551ac2fa0
    30 from os import listdir, path
    30 from os import listdir, path
    31 import util.paths as paths
    31 import util.paths as paths
    32 from connectors.ConnectorBase import ConnectorBase
    32 from connectors.ConnectorBase import ConnectorBase
    33 from types import ClassType
    33 from types import ClassType
    34 
    34 
    35 connectors_packages = ["PYRO","WAMP"]
    35 connectors_packages = ["PYRO", "WAMP"]
    36 
    36 
    37 
    37 
    38 def _GetLocalConnectorClassFactory(name):
    38 def _GetLocalConnectorClassFactory(name):
    39     return lambda: getattr(__import__(name, globals(), locals()), name + "_connector_factory")
    39     return lambda: getattr(__import__(name, globals(), locals()), name + "_connector_factory")
    40 
    40 
    42 connectors = {name: _GetLocalConnectorClassFactory(name)
    42 connectors = {name: _GetLocalConnectorClassFactory(name)
    43               for name in connectors_packages}
    43               for name in connectors_packages}
    44 
    44 
    45 _dialogs_imported = False
    45 _dialogs_imported = False
    46 per_URI_connectors = None
    46 per_URI_connectors = None
    47 schemes = None 
    47 schemes = None
       
    48 
    48 
    49 
    49 # lazy import of connectors dialogs, only if used
    50 # lazy import of connectors dialogs, only if used
    50 def _Import_Dialogs():
    51 def _Import_Dialogs():
    51     global per_URI_connectors, schemes, _dialogs_imported
    52     global per_URI_connectors, schemes, _dialogs_imported
    52     if not _dialogs_imported: 
    53     if not _dialogs_imported:
    53         _dialogs_imported = True
    54         _dialogs_imported = True
    54         per_URI_connectors = {}
    55         per_URI_connectors = {}
    55         schemes = []
    56         schemes = []
    56         for con_name in connectors_packages:
    57         for con_name in connectors_packages:
    57             module =  __import__(con_name + '_dialog', globals(), locals())
    58             module = __import__(con_name + '_dialog', globals(), locals())
    58 
    59 
    59             for scheme in module.Schemes:
    60             for scheme in module.Schemes:
    60                 per_URI_connectors[scheme] = getattr(module, con_name + '_dialog')
    61                 per_URI_connectors[scheme] = getattr(module, con_name + '_dialog')
    61                 schemes += [scheme]
    62                 schemes += [scheme]
    62 
    63 
   108         scheme = _scheme[:-1]
   109         scheme = _scheme[:-1]
   109     else:
   110     else:
   110         return None
   111         return None
   111 
   112 
   112     # import module according to uri type and get connector specific baseclass
   113     # import module according to uri type and get connector specific baseclass
   113     # first call to import the module, 
   114     # first call to import the module,
   114     # then call with parameters to create the class
   115     # then call with parameters to create the class
   115     connector_specific_class = connectors[scheme]()(uri, confnodesroot)
   116     connector_specific_class = connectors[scheme]()(uri, confnodesroot)
   116     
   117 
   117     if connector_specific_class is None:
   118     if connector_specific_class is None:
   118         return None
   119         return None
   119 
   120 
   120     # new class inheriting from generic and specific connector base classes
   121     # new class inheriting from generic and specific connector base classes
   121     return ClassType(_scheme + "_connector", 
   122     return ClassType(_scheme + "_connector",
   122                      (ConnectorBase, connector_specific_class), {})()
   123                      (ConnectorBase, connector_specific_class), {})()
       
   124 
   123 
   125 
   124 def EditorClassFromScheme(scheme):
   126 def EditorClassFromScheme(scheme):
   125     _Import_Dialogs()
   127     _Import_Dialogs()
   126     return per_URI_connectors.get(scheme, None) 
   128     return per_URI_connectors.get(scheme, None)
       
   129 
   127 
   130 
   128 def ConnectorSchemes():
   131 def ConnectorSchemes():
   129     _Import_Dialogs()
   132     _Import_Dialogs()
   130     return schemes
   133     return schemes