def __init__(self, config, user_handler): # Module cache self._MODULECOMM = {} self._MODULECALL = {} self._MODULESCOP = {} self.user_handler = user_handler self.config = config # Get the modules list self.modules = self.config.get('modules') # Handlers self.core = MySTModuleCore(self.config, self.user_handler) self.external = MySTModuleExternal(self.config) self.interface = MySTModuleInterface() # mod_core is to cache core reserved functions (that is allways present and cannot be overriden) self._MODULECORE = self.core.getCoreFunctions() # load config self.loadConfigInfo()
class MySTModuleManager: def __init__(self, config, user_handler): # Module cache self._MODULECOMM = {} self._MODULECALL = {} self._MODULESCOP = {} self.user_handler = user_handler self.config = config # Get the modules list self.modules = self.config.get('modules') # Handlers self.core = MySTModuleCore(self.config, self.user_handler) self.external = MySTModuleExternal(self.config) self.interface = MySTModuleInterface() # mod_core is to cache core reserved functions (that is allways present and cannot be overriden) self._MODULECORE = self.core.getCoreFunctions() # load config self.loadConfigInfo() # Get user def getUserHandler(self): return self.user_handler # Get user escope def getEscope(self, command): try: return self._MODULESCOP[command] except Exception: return '' # Get type of command def getType(self, command): try: return self._MODULECOMM[command] except Exception: return '' # Get call to command def getCall(self, command): try: return self._MODULECALL[command] except Exception: return '' def execute(self, instruct): commandtype = self.getType(instruct.getCommand()) escopes = self.getEscope(instruct.getCommand()) # User enabled validation if not self.user_handler.isUserEnabled(instruct.getContact()): return MySTReply(MySTBase.getErrorCode(), 'Error. User not enabled.') # Escope validatons escope = self.user_handler.getUserEscope(instruct.getContact()).lower() if escope in escopes: if (commandtype == 'core' or commandtype == 'internal'): return self.core.execute(instruct) elif (commandtype == 'external'): return self.external.execute(instruct) elif (commandtype == 'interface'): return self.interface.execute(instruct) return MySTReply(MySTBase.getErrorCode(), MySTBase.getCommandNotFoundMessage()) def loadConfigInfo(self): # cache core functions for module in self._MODULECORE: self._MODULECOMM[module] = 'core' self._MODULESCOP[module] = self._MODULECORE[module] # walk for modules list for module in self.modules: if not self._MODULECORE.has_key(module): # check if module list has status key if self.modules[module].has_key('status'): # check if module is enabled if (self.modules[module]['status'].lower() == 'enabled'): # check module type if self.modules[module].has_key('type'): # check module call if self.modules[module].has_key('call'): if (self.modules[module]['type'].lower() == 'external'): self._MODULECALL[module] = self.modules[module]['call'].lower() else: self._MODULECALL[module] = '' # add module type to module list self._MODULECOMM[module] = self.modules[module]['type'].lower() # check module escope if self.modules[module].has_key('escope'): escopenames = self.modules[module]['escope'].replace(' ', '') escopelist = escopenames.split(',') self._MODULESCOP[module] = escopelist