Skip to content

biohub.core.plugins

hsfzxjy edited this page Jul 22, 2017 · 3 revisions

概述

此模块为 biohub 插件系统的核心,包含了插件管理及插件开发中的诸多功能。

从技术层面上看,一个 Biohub Plugin 是一个 特殊的 django app,和普通 app 有着同等的地位,只不过其受 biohub 插件系统而不是 django 的管理。插件可以被热加载和热卸载(由于 python 模块机制的限制,事实上只有部分元素被卸载)。

插件的全局唯一标识符为其绝对模块路径(如 'biohub.forum'),称为插件的 Plugin Name;其 default_app_config 需指向一个 biohub.core.plugins.config.PluginConfig 的子类(默认定义在 apps.py 中),被称为插件的 Plugin Config。插件开发者需手动填写 Plugin Config 中的空字段(作者、描述等信息)。

运行时,Biohub 会读取 config.json 中的 PLUGINS 字段(一个包含绝对模块路径的列表),并自动加载其中的插件。热加载/卸载插件时,配置文件中的 PLUGINS 字段也会相应地更新。

命令

此模块定义了诸多用于创建/管理插件的命令。列表如下:

  • newplugin
  • mkpluginmigrations
  • migrateplugin
  • installplugin
  • removeplugin

详细用法请参考 manage.py help <subcommand>

.config

.PluginConfig

Plugin Config 的公共基类。

.exceptions

.RemovalError

卸载异常。

.InstallationError

加载异常。

.DatabaseError

加载插件时发生的数据库异常。

.URLConfError

加载插件时更新 URLConf 过程中发生的异常。

.registry

.manager

插件管理器。

.plugin_infos

包含已安装插件信息的字典,键为 Plugin Name,值为包含插件额外信息(作者、描述等)的字典。

.installing

标识是否正在安装/卸载。

.migrating

标识是否有插件在 migrate models。

.remove(plugin_names, update_config=False, invalidate_urlconf=True)

卸载 plugin_names 中标识的插件。update_config 标识是否将结果写回 config.jsoninvalidate_urlconf 标识是否更新 URLConf。

.install(plugin_names, update_config=False, invalidate_urlconf=True, migrate_database=False, migrate_options=None)

安装 plugin_names 中标识的插件。update_configinvalidate_urlconf 意义同上,migrate_database 标识是否为新安装的插件 migrate models。migrate_options 为一个字典,为 migration 提供可选的参数,详见 prepare_database

.prepare_database(self, plugin_names, new_process=False, no_input=False, no_output=False, verbosity=0, test=False)

plugin_names 中指定的插件执行 migration 操作。被指定的插件必须已经被安装new_process 标识是否在子进程中执行 migration 操作。其他参数意义同 migrateplugin 命令。