微功能客户端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_URLMFN_USERMFN_PASSWORDMFN_NAME
  • 使用构造函数MfnClient(mfn_url,mfn_user,mfn_password,mfn_name,proxies)

配置文件应包含一个以参数名为键的JSON字典:

^{pr2}$

除代理配置使用http_proxyhttps_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}")

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将字符串转换为自定义对象   java如何从socket方法获取数据?   Java中的soap读取回车和新行   java在单击时替换图像   java推荐的使用RXJava执行异步任务的方法   java MySql连接器JDBC驱动程序不支持连接池吗?   java将活动堆栈清理到顶部   java计数用户输入的数量   java从webservice下载大文件导致应用程序性能问题   JavaLocalDate。EPOCH不可用   java如何在使用Selenium等待一定时间后,在页面无法加载(get(url))时自动刷新页面   java Calendar setLenient方法不允许检查年份字段的健全性   java Eclipse和intelliJ 安卓 SDK问题   java为什么我可以在没有super关键字的情况下调用父方法?   java iText的PDF格式不好