示例#1
0
文件: plugins.py 项目: ljd2000/xnote
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()
示例#2
0
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()
示例#3
0
文件: plugins.py 项目: driphub/xnote
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()
示例#4
0
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
示例#5
0
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