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 |