C.2 模块

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

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

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

  1. 源文件必须位于用户模块文件夹中。此路径在 Workbench 脚本外壳中显示,标签为 正在寻找用户插件。还可以使用主菜单项 脚本安装插件/模块文件 安装文件。

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

    操作系统 文件路径
    Windows %AppData%\MySQL\Workbench\modules
    macOS ~username/Library/Application Support/MySQL/Workbench/modules
    Linux ~username/.mysql/workbench/modules

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

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

    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:其他值的列表。可以将内容类型指定为元组形式的 (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