在 GRT 中,模块是包含函数列表的库,这些函数被导出供其他模块、脚本或 Workbench 本身中的代码使用。模块可以使用 C++ 或 Python 编写,但用于参数和返回值的数据类型必须是 GRT 类型。
GRT 模块类似于 Python 模块,但从内置的 grt
模块导入,而不是直接从外部文件导入。加载到 grt
模块中的模块列表是从 grt.modules
中获取的。可以使用类似 from grt.modules import WbModel
这样的语句在 Python 中导入模块。
要从 Python 代码导出函数作为模块,请执行以下步骤
-
源文件必须位于用户模块文件夹中。此路径在 Workbench 脚本外壳中显示,标签为 正在寻找用户插件。还可以使用主菜单项 、 安装文件。
表 C.2 默认用户模块文件位置
操作系统 文件路径 Windows %AppData%\MySQL\Workbench\modules macOS ~username/Library/Application Support/MySQL/Workbench/modules Linux ~username/.mysql/workbench/modules
源文件名必须具有
_grt.py
扩展名;例如,my_module_grt.py
。-
必须定义一些模块元数据。这可以使用 wb 模块中的
DefineModule
函数来完成from wb import * ModuleInfo = DefineModule(name='MyModule', author='Your Name', version='1.0')
-
要导出的函数需要声明其签名。这使用之前创建的 ModuleInfo 对象中的导出装饰器来实现
@ModuleInfo.export(grt.INT, grt.STRING) def checkString(s): ...
对于
export
语句,返回值类型首先列出,然后是输入参数类型,指定为 GRT 类型名。可以使用以下类型名grt.INT
:整数值。也用于布尔值。grt.DOUBLE
:浮点数值。grt.STRING
:UTF-8 或 ASCII 字符串数据。grt.DICT
:键值字典项。键必须是字符串。grt.LIST
:其他值的列表。可以将内容类型指定为元组形式的(grt.LIST, <type-or-class>)
。例如,(grt.LIST, grt.STRING) 用于字符串列表。对于表格对象列表,将指定以下内容:(grt.LIST, grt.classes.db_table)
。grt.OBJECT
:来自grt.classes
的 GRT 对象实例或 GRT 类对象。
注意这些类型在
grt
模块中定义,必须先导入才能使用。
以下代码片段说明了声明导出单个函数的模块
from wb import *
import grt
ModuleInfo = DefineModule(name='MyModule', author="your name", version='1.0')
@ModuleInfo.export(grt.DOUBLE, grt.STRING, (grt.LIST, grt.DOUBLE))
def printListSum(message, doubleList):
sum = 0
for d in doubleList:
sum = sum + d
print message, sum
return sum