def load_module(cls): global _drivers modules, errors = load_module_dir(path.join("actions", "sqldrivers")) for module in modules: klass = getattr(module, module.__name__.title()) _drivers[module.__name__] = klass() return modules, errors
def load_actions(self): module_list = load_module_dir("actions") for module in module_list: module_name = module.__name__ action_klass = getattr(module, module_name.title()) if not issubclass(action_klass, BaseAction): # BaseAction クラスを継承していないクラスがあったらエラー raise Exception(module_name.title() + " class must extend BaseAction") self.action_klasses[module_name] = action_klass
def load_actions(self): module_list, self.load_error_list = load_module_dir("actions") for module in module_list: # action に使いたいモジュール名がすでに使われている場合にprefixに "_" を付ける module_name = module.__name__.lstrip("_") action_klass = getattr(module, module_name.title()) if not issubclass(action_klass, BaseAction): # BaseAction クラスを継承していないクラスがあったらエラー raise Exception(module_name.title() + " class must extend BaseAction") self.action_klasses[module_name] = action_klass
def add_plugin(plugin_dict, custom_plugin_dir, prefix=""): plugins, error_list = load_module_dir(custom_plugin_dir) for module in plugins: name_list = [name for name in dir(module) if name.startswith(prefix) and len(name) > len(prefix)] overridable = getattr(module, prefix + "override", []) for name in name_list: obj = getattr(module, name) if callable(obj): plugin_name = name[len(prefix):] if plugin_name in plugin_dict and name not in overridable: raise Exception(name + " is already defined") plugin_dict[plugin_name] = obj
def load_actions(self): module_list, error = load_module_dir("actions") for module in module_list: # action に使いたいモジュール名がすでに使われている場合にprefixに "_" を付ける module_name = module.__name__.lstrip('_') action_klass = getattr(module, module_name.title()) if not issubclass(action_klass, BaseAction): # BaseAction クラスを継承していないクラスがあったらエラー raise Exception(module_name.title() + " class must extend BaseAction") modules, errors = type.__getattribute__(action_klass, 'load_module')() if errors: error.extend(errors) self.action_klasses[module_name] = action_klass if error: raise error
def add_plugin(plugin_dict, custom_plugin_dir, prefix=""): plugins = load_module_dir(custom_plugin_dir) other_info_list = [] for module in plugins: name_list = [name for name in dir(module) if name.startswith(prefix) and len(name) > len(prefix)] overridable = getattr(module, prefix + "override", []) for name in name_list: info = {} obj = getattr(module, name) if callable(obj): plugin_name = name[len(prefix):] if plugin_name in plugin_dict and name not in overridable: raise Exception(name + " is already defined") plugin_dict[plugin_name] = obj else: info[name] = obj other_info_list.append(info) return other_info_list
# -*- coding: utf-8 -*- from os import path from baseaction import BaseAction from moduleloader import load_module_dir drivers = {} modules, errors = load_module_dir(path.join("actions", "sqldrivers")) for module in modules: klass = getattr(module, module.__name__.title()) drivers[module.__name__] = klass() class Sql(BaseAction): DEFAULT_PORT = 3306 def do_select(self, driver, host, db, user, password, sql, port=DEFAULT_PORT): driver = drivers[driver] conn = driver.connect(host=host, port=port, db=db, user=user, password=password) cursor = conn.cursor() self.result["rowcount"] = cursor.execute(sql) self.result["rows"] = [list(row) for row in cursor.fetchall()] cursor.close() # connectionManager的なのを作ったら個別のcloseはしない conn.close() def do_selectdict(self, driver, host, db, user, password, sql, port=DEFAULT_PORT): driver = drivers[driver]
def setup(cls, config): global drivers modules, errors = load_module_dir(path.join("actions", "sqldrivers")) for module in modules: klass = getattr(module, module.__name__.title()) drivers[module.__name__] = klass()