微功能客户端SDK
mfn-sdk的Python项目详细描述
KNIX微功能SDK
易于使用的软件包,可访问KNIX微功能的管理界面以及 部署的工作流。在
SDK的最新版本可以从KNIX releases获得。 它也托管在PyPI上,可以使用PyPA推荐的工具安装Python包:
pip3 install mfn_sdk
设置客户端
MFN客户端可以通过各种方式配置,使用以下顺序的优先级:
- 配置文件
../settings.json
,~/settings.json
和/或./settings.json
) - 环境变量(
MFN_URL
,MFN_USER
,MFN_PASSWORD
,MFN_NAME
) - 使用构造函数
MfnClient(mfn_url,mfn_user,mfn_password,mfn_name,proxies)
配置文件应包含一个以参数名为键的JSON字典:
^{pr2}$除代理配置使用http_proxy
和https_proxy
变量外,还可以使用等效的环境变量:
exportMFN_URL="<http://host:port>"exportMFN_USER="<email>"exportMFN_PASSWORD="<password>"exportMFN_NAME="<full name>"exportHTTP_PROXY="http://<proxyhost>:<port>"# or http_proxyexportHTTPS_PROXY="http://<proxyhost>:<port>"# or https_proxy
要在运行时重写参数,可以在构造函数中传递参数。在
frommfn_sdkimportMfnClient# MfnClient(mfn_url,mfn_user,mfn_password,mfn_name,proxies)mfn=MfnClient(mfn_url="<http://host:port>",mfn_user="<email>",mfn_password="<password>",mfn_name="<full name>",proxies={"http":"http://<proxyhost>:<port>","https":"http://<proxyhost>:<port>"})
注意:只有当用户不存在时才使用mfn_name
参数(因为每个新用户都需要它)。如果参数丢失,客户端SDK将只尝试登录,而不会创建用户。在
列出函数和工作流
frommfn_sdkimportMfnClientmfn=MfnClient(mfn_url="https://knix.io",mfn_user="test@example.com",mfn_password="test123",mfn_name="Mr. Test")forfunctioninmfn.functions:print(function)forworkflowinmfn.workflows:print(workflow)
创建新工作流
要创建一个只有一个函数的简单工作流,需要函数源和工作流描述。 一个函数可以有明文代码或ZIP文件,或者两者都附加到它(下面将详细介绍)。在
function=mfn.add_function("echo")function.code="""def handle(event, context): context.log("Echoing"+event) return event"""
关联的工作流描述以包含JSON的字符串形式提供。在
wf=mfn.add_workflow('wf_echo')wf.json="""{ "Comment": "Echo workflow", "StartAt": "entry", "States": { "entry": { "Type": "Task", "Resource": "echo", "End": true } }}"""
读写对象(注意:只允许字符串)
租户工作流共享的键值存储可以在客户端对象上使用put()、get()和delete()进行修改或访问:
mfn.put("my_key","some-value")print("We have stored: "+mfn.get("my_key"))mfn.delete("my_key")mfn.keys()# should be empty list
功能拉链
函数可以是源代码字符串和/或ZIP文件。如果ZIP文件包含具有资源名称(即函数名)的源文件,则其handle函数将用作起点。 但是,如果源代码也是作为字符串附加的,它将覆盖所述文件并被使用。在
在下面的示例中,当前目录被压缩并作为函数ZIP上载。在
importosfromzipfileimportZipFile# Create a new functiong=mfn.add_function('myfunction')# Create a zip file from the directory contentszip_name="myfunction.zip"ifos.path.exists(zip_name):os.remove(zip_name)forroot,dirs,filesinos.walk('.'):withZipFile(zip_name,'w')aszf:forfninfiles:zf.write(fn)# upload the zip fileg.upload(zip_name)
执行工作流
一旦创建了工作流并上载了其功能,就可以使用客户端SDK部署和执行它。
deploy(timeout=None)
函数可以使用超时。如果timeout=None
,它将在请求部署后立即返回。如果timeout=0
,它将无限期地等待工作流将其状态更改为“已部署”。任何timeout > 0
都将等待那么多秒,如果工作流到那时还没有达到“部署”的状态,就会抛出异常。在
execute(data,timeout=60)
函数调用已部署的工作流。这里,超时传递给调用工作流执行的Python请求HTTP事务。在
使用上面的echo工作流示例,我们创建了一个echo_wf
工作流对象,可以按如下方式部署和执行:
wf.deploy(timeout=0)# wait until wf.status=='deployed'print("Sending Hello")result=wf.execute("Hello")print(f"Received {result}")
- 项目
标签: