def get_plugins(cls):
"""
Dynamically loads all the plugins in the plugins folder and sorts
them by the PRIORITY key. If no PRIORITY is defined for a given
plugin, a priority of 0 is assumed.
"""
logger = logging.getLogger(__name__)
locations = [
dingdangpath.PLUGIN_PATH,
dingdangpath.CONTRIB_PATH,
dingdangpath.CUSTOM_PATH
]
logger.debug("Looking for plugins in: %s",
', '.join(["'%s'" % location for location in locations]))
plugins = []
exclude_plugins = []
# plugins that are not allow to be call via Wechat or Email
thirdparty_exclude_plugins = ['NetEaseMusic']
for finder, name, ispkg in pkgutil.walk_packages(locations):
try:
loader = finder.find_module(name)
mod = loader.load_module(name)
except Exception:
logger.warning("Skipped plugin '%s' due to an error.", name,
exc_info=True)
else:
if hasattr(mod, 'WORDS'):
logger.debug("Found plugin '%s' with words: %r", name,
mod.WORDS)
plugins.append(mod)
if name in thirdparty_exclude_plugins:
exclude_plugins.append(mod)
else:
logger.warning("Skipped plugin '%s' because it misses " +
"the WORDS constant.", name)
plugins.sort(key=lambda mod: mod.PRIORITY if hasattr(mod, 'PRIORITY')
else 0, reverse=True)
return (plugins, exclude_plugins)
评论列表
文章目录