def load_plugin_file(fpath, fname=None): if fname is None: fname = os.path.basename(fpath) dirname = os.path.dirname(fpath) # plugin name pname = fsutil.get_relative_path(fpath, xconfig.PLUGINS_DIR) vars = dict() vars["script_name"] = pname vars["fpath"] = fpath try: module = xutils.load_script(fname, vars, dirname=dirname) main_class = vars.get("Main") if main_class != None: main_class.fname = fname main_class.fpath = fpath instance = main_class() context = PluginContext() context.fname = fname context.fpath = fpath context.name = os.path.splitext(fname)[0] context.title = getattr(instance, "title", "") context.category = xutils.attrget(instance, "category") context.required_role = xutils.attrget(instance, "required_role") context.url = "/plugins/%s" % pname if hasattr(main_class, 'on_init'): instance.on_init(context) context.clazz = main_class xconfig.PLUGINS_DICT[pname] = context except: # TODO 增加异常日志 xutils.print_exc()
def load_plugins(dirname): if not xconfig.LOAD_PLUGINS_ON_INIT: return xconfig.PLUGINS = {} for fname in os.listdir(dirname): fpath = os.path.join(dirname, fname) if os.path.isfile(fpath) and fname.endswith(".py"): script_name = "plugins/" + fname vars = dict() vars["script_name"] = script_name vars["fpath"] = fpath try: module = xutils.load_script(script_name, vars) main_class = vars.get("Main") if main_class != None: main_class.fname = fname main_class.fpath = fpath instance = main_class() context = PluginContext() context.fname = fname context.name = os.path.splitext(fname)[0] context.title = getattr(instance, "title", "") context.category = xutils.attrget(instance, "category") if hasattr(main_class, 'on_init'): instance.on_init(context) context.clazz = main_class xconfig.PLUGINS[fname] = context except: xutils.print_exc()
def load_plugin_file(fpath, fname=None): if not is_plugin_file(fpath): return if fname is None: fname = os.path.basename(fpath) dirname = os.path.dirname(fpath) # 相对于插件目录的名称 plugin_name = fsutil.get_relative_path(fpath, xconfig.PLUGINS_DIR) vars = dict() vars["script_name"] = plugin_name vars["fpath"] = fpath try: module = xutils.load_script(fname, vars, dirname=dirname) main_class = vars.get("Main") if main_class != None: # 实例化插件 main_class.fname = fname main_class.fpath = fpath instance = main_class() context = PluginContext() context.fname = fname context.fpath = fpath context.name = os.path.splitext(fname)[0] context.title = getattr(instance, "title", "") context.category = xutils.attrget(instance, "category") context.required_role = xutils.attrget(instance, "required_role") context.url = "/plugins/%s" % plugin_name context.clazz = main_class context.edit_link = "code/edit?path=" + fpath context.link = context.url # 初始化插件 if hasattr(main_class, 'on_init'): instance.on_init(context) # 注册插件 xconfig.PLUGINS_DICT[plugin_name] = context return context except: # TODO 增加异常日志 xutils.print_exc()
def find_plugins(category): role = xauth.get_current_role() plugins = [] if role is None: # not logged in return plugins if category == "None": category = None for fname in xconfig.PLUGINS: p = xconfig.PLUGINS.get(fname) if p and xutils.attrget(p.clazz, "category") == category: required_role = xutils.attrget(p.clazz, "required_role") if role == "admin" or required_role is None or required_role == role: plugins.append(p) plugins.sort() return plugins
def get_tags(creator, note_id): key = "note_tags:%s:%s" % (creator, note_id) note_tags = dbutil.get(key) if note_tags: return attrget(note_tags, "tags") return None