C.2 模块

在 GRT 模块中是包含函数列表的库,这些函数被导出以供其他模块、脚本或 Workbench 本身中的代码使用。模块可以用 C++ 或 Python 编写,但用于参数和返回值的数据类型必须是 GRT 类型。

GRT 模块类似于 Python 模块,但是是从内置grt模块导入的,而不是直接从外部文件导入的。加载到模块中的模块列表 grt是从 grt.modules. 模块可以使用诸如from grt.modules import WbModel.

要从 Python 代码中将函数导出为模块,请执行以下步骤:

  1. 源文件必须位于用户模块文件夹中。此路径显示在 Workbench Scripting Shell 中,标签 为 Looking for user plugins in。也可以使用主菜单项 ScriptingInstall Plugin/Module File 安装文件

    表 C.2 默认用户模块文件位置

    操作系统 文件路径
    视窗 %AppData%\MySQL\Workbench\modules
    苹果系统 ~用户名/Library/Application Support/MySQL/Workbench/modules
    Linux ~用户名/.mysql/workbench/modules

  2. 源文件名必须有扩展名 _grt.py;例如, my_module_grt.py

  3. 必须定义一些模块元数据。这可以使用DefineModulewb 模块中的函数来完成:

    from wb import *
    ModuleInfo = DefineModule(name='MyModule', author='Your Name', version='1.0')
  4. 要导出的函数需要声明其签名。这是使用先前创建的 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:其他值的列表。可以在 form 中将内容的类型指定为元组(grt.LIST, <type-or-class>)。例如,(grt.LIST, grt.STRING) 表示字符串列表。对于表对象列表,将指定以下内容: (grt.LIST, grt.classes.db_table).

    • grt.OBJECT: GRT 对象或 GRT 类对象的实例,来自 grt.classes.

    笔记

    这些类型在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