diff -r 7eb6cb70bf5b -r e5703dc8848e connectors/__init__.py --- a/connectors/__init__.py Tue Oct 30 14:08:28 2018 +0100 +++ b/connectors/__init__.py Thu Nov 08 09:39:06 2018 +0100 @@ -30,31 +30,33 @@ from os import listdir, path import util.paths as paths -_base_path = paths.AbsDir(__file__) +connectors_packages = ["PYRO","WAMP"] + def _GetLocalConnectorClassFactory(name): return lambda: getattr(__import__(name, globals(), locals()), name + "_connector_factory") -def _GetLocalConnectorClassDialog(name): - return lambda: getattr(__import__(name + '.dialog', globals(), locals(), fromlist=['dialog']), name + "_connector_dialog") +connectors = {name: _GetLocalConnectorClassFactory(name) + for name in connectors_packages} +_dialogs_imported = False +per_URI_connectors = None +schemes = None -def _GetLocalConnectorURITypes(name): - return lambda: getattr(__import__(name + '.dialog', globals(), locals(), fromlist=['dialog']), "URITypes", None) +# lazy import of connectors dialogs, only if used +def _Import_Dialogs(): + global per_URI_connectors, schemes, _dialogs_imported + if not _dialogs_imported: + _dialogs_imported = True + per_URI_connectors = {} + schemes = [] + for con_name in connectors_packages: + module = __import__(con_name + '_dialog', globals(), locals()) - -connectors = {name: - _GetLocalConnectorClassFactory(name) - for name in listdir(_base_path) - if (path.isdir(path.join(_base_path, name)) and - not name.startswith("__"))} - -connectors_dialog = {name: - {"function": _GetLocalConnectorClassDialog(name), "URITypes": _GetLocalConnectorURITypes(name)} - for name in listdir(_base_path) - if (path.isdir(path.join(_base_path, name)) and - not name.startswith("__"))} + for scheme in module.Schemes: + per_URI_connectors[scheme] = getattr(module, con_name + '_dialog') + schemes += [scheme] def ConnectorFactory(uri, confnodesroot): @@ -83,20 +85,10 @@ return connectorclass(uri, confnodesroot) -def ConnectorDialog(conn_type, confnodesroot): - if conn_type not in connectors_dialog: - return None +def EditorClassFromScheme(scheme): + _Import_Dialogs() + return per_URI_connectors.get(scheme, None) - connectorclass = connectors_dialog[conn_type]["function"]() - return connectorclass(confnodesroot) - - -def GetConnectorFromURI(uri): - typeOfConnector = None - for conn_type in connectors_dialog: - connectorTypes = connectors_dialog[conn_type]["URITypes"]() - if connectorTypes and uri in connectorTypes: - typeOfConnector = conn_type - break - - return typeOfConnector +def ConnectorSchemes(): + _Import_Dialogs() + return schemes