98 lines
3.1 KiB
Python
98 lines
3.1 KiB
Python
#coding: utf-8
|
|
# +-------------------------------------------------------------------
|
|
# | YakPanel
|
|
# +-------------------------------------------------------------------
|
|
# | Copyright (c) 2015-2099 YakPanel(www.yakpanel.com) All rights reserved.
|
|
# +-------------------------------------------------------------------
|
|
# | Author: hwliang <hwl@yakpanel.com>
|
|
# +-------------------------------------------------------------------
|
|
|
|
#+--------------------------------------------------------------------
|
|
#| 插件认证模块
|
|
#+--------------------------------------------------------------------
|
|
|
|
|
|
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<string> 插件名称
|
|
@return Plguin<object>
|
|
'''
|
|
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<bool> 是否强制重新获取列表
|
|
@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<string> 方法名称
|
|
@param get_args<dict_obj> 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<string> 函数名称
|
|
@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<string> 方法名称
|
|
@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 ''
|
|
|