#coding: utf-8 # +------------------------------------------------------------------- # | YakPanel # +------------------------------------------------------------------- # | Copyright (c) 2015-2099 YakPanel(www.yakpanel.com) All rights reserved. # +------------------------------------------------------------------- # | Author: hwliang # +------------------------------------------------------------------- #+-------------------------------------------------------------------- #| 插件认证模块 #+-------------------------------------------------------------------- import public import PluginLoader class Plugin: __plugin_name = None __is_php = False __dict__ = None __obj_dict = {} def __init__(self,init_plugin_name = None): ''' @name 实例化插件对像 @author hwliang<2021-06-15> @param init_plugin_name 插件名称 @return Plguin ''' if not init_plugin_name is False: if not init_plugin_name: raise ValueError('参数错误,plugin_name少需要一个有效参数') self.__plugin_name = init_plugin_name def get_plugin_list(self,upgrade_force = False): ''' @name 获取插件列表 @author hwliang<2021-06-15> @param upgrade_force 是否强制重新获取列表 @return dict ''' force = 1 if upgrade_force else 0 return PluginLoader.get_plugin_list(force) def exec_fun(self,get_args,def_name = None): ''' @name 执行指定方法 @author hwliang<2021-06-16> @param def_name 方法名称 @param get_args POST/GET参数对像 @return mixed ''' if not def_name: def_name = get_args.get("s","") else: if not 's' in get_args: get_args.s = def_name res = PluginLoader.plugin_run(self.__plugin_name,def_name,get_args) if isinstance(res,dict): if 'status' in res and res['status'] == False and 'msg' in res: if isinstance(res['msg'],str): if res['msg'].find('Traceback ') != -1: raise public.PanelError(res['msg']) return res def get_fun(self,def_name): ''' @name 获取函对像 @author hwliang<2021-06-28> @param def_name 函数名称 @return func_object ''' if def_name in self.__obj_dict.keys(): return self.__obj_dict[def_name] get_args = public.dict_obj() get_args.plugin_get_object = 1 return PluginLoader.plugin_run(self.__plugin_name,def_name,get_args) def isdef(self,def_name): ''' @name 指定方法是否存在 @author hwliang<2021-06-16> @param def_name 方法名称 @return bool ''' if self.__is_php: return True self.__obj_dict[def_name] = self.get_fun(def_name) return True if self.__obj_dict[def_name] else False def __dir__(self): return ''