|- ${你的插件标识} # 插件包名
|- ${你的插件标识} # 插件包名
|- __init__.py py # py包标识
|- command_line.py # 命令入口文件,主要包括插件逻辑
|- python_atom_sdk # 插件开发SDK包
|- MANIFEST.in # 包文件类型申明
|- requirements.txt # 依赖申明
|- setup.py # 执行包打包配置
|- task.json # 定义插件元信息以及UI组件配置
|- demo_release.zip # 发布包
|- demo-1.1.0.tar.gz # 插件执行包
|- task.json # 插件配置文件
插件的逻辑代码主要在command_line.py里,以下demo示例,演示了一个简单的插件,从输入框input_demo获取用户输入值,将用户输入内容打印到日志中,并输出到插件结果中。
# -*- coding: utf-8 -*-
from __future__ import print_function
from __future__ import absolute_import
from __future__ import unicode_literals
import python_atom_sdk as sdk
from .error_code import ErrorCode
err_code = ErrorCode()
def exit_with_error(error_type=None, error_code=None, error_msg="failed", platform_code=None, platform_error_code=None):
"""
@summary: exit with error
"""
if not error_type:
error_type = sdk.OutputErrorType.PLUGIN
if not error_code:
error_code = err_code.PLUGIN_ERROR
sdk.log.error("error_type: {}, error_code: {}, error_msg: {}".format(error_type, error_code, error_msg))
output_data = {
"status": sdk.status.FAILURE,
"errorType": error_type,
"errorCode": error_code,
"message": error_msg,
"type": sdk.output_template_type.DEFAULT,
"platformCode": platform_code,
"platformErrorCode": platform_error_code
}
sdk.set_output(output_data)
exit(error_code)
def exit_with_succ(data=None, quality_data=None, msg="run succ"):
"""
@summary: exit with succ
"""
if not data:
data = {}
output_template = sdk.output_template_type.DEFAULT
if quality_data:
output_template = sdk.output_template_type.QUALITY
output_data = {
"status": sdk.status.SUCCESS,
"message": msg,
"type": output_template,
"data": data
}
if quality_data:
output_data["qualityData"] = quality_data
sdk.set_output(output_data)
sdk.log.info("finish")
exit(err_code.OK)
def main():
"""
@summary: main
"""
sdk.log.info("enter main")
# 输入
input_params = sdk.get_input()
# 获取名为input_demo的输入字段值
input_demo = input_params.get("input_demo", None)
sdk.log.info("input_demo is {}".format(input_demo))
if not input_demo:
exit_with_error(error_type=sdk.output_error_type.USER,
error_code=err_code.USER_CONFIG_ERROR,
error_msg="input_demo is None")
# 插件逻辑
sdk.log.info("input: %s"%input_demo)
# 插件执行结果、输出数据
data = {
"output_demo": {
"type": sdk.output_field_type.STRING,
"value": input_demo
}
}
exit_with_succ(data=data)
exit(0)
{
"atomCode": "demo",
"execution": {
"packagePath": "demo-1.0.0.tar.gz",
"language": "python",
"demands": [
"pip install demo-1.0.0.tar.gz"
],
"target": "demo"
},
"input": {
"input_demo": {
"label":"入参1",
"default":"",
"placeholder":"入参1",
"type":"vuex-input",
"desc":"入参1",
"required": true
}
},
"output": {
"output_demo": {
"description" : "输出示例",
"type": "string",
"isSensitive": false
}
}
}