11.4. 开发 Python 功能
使用 Python 的 OpenShift Serverless 功能只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
创建 PythonG 功能项目后,您可以修改提供的模板文件,以将业务逻辑添加到您的功能中。这包括配置功能调用和返回的标头和状态代码。
11.4.1. 先决条件 复制链接链接已复制到粘贴板!
- 在开发功能前,您必须完成 配置 OpenShift Serverless 功能 中的步骤。
11.4.2. Python 功能模板结构 复制链接链接已复制到粘贴板!
使用 Knative (kn
) CLI 创建 Python 功能时,项目目录类似于典型的 Python 项目。Python 功能的限制非常少。唯一的要求是项目包含一个 func.py
文件,其中包含一个 main ()
函数,以及一个 func.yaml
配置文件。
开发人员不限于模板 requirements.txt
文件中提供的依赖项。可以像在任何其他 Python 项目中一样添加其他依赖项。为部署构建项目时,这些依赖项将包含在创建的运行时容器镜像中。
http
和 event
触发器功能具有相同的模板结构:
模板结构
fn ├── func.py ├── func.yaml ├── requirements.txt └── test_func.py
fn
├── func.py
├── func.yaml
├── requirements.txt
└── test_func.py
11.4.3. 关于调用 Python 功能 复制链接链接已复制到粘贴板!
Python 功能可以通过简单的 HTTP 请求调用。收到传入请求后,将通过 上下文
对象作为第一个参数来调用函数。
上下文
对象是一个 Python 类,具有两个属性:
-
request
属性始终存在,包含 Flask请求(request)
对象。 -
如果传入请求是
CloudEvent
对象,则第二个属性cloud_event
会被填充。
开发人员可以从上下文对象访问任何 CloudEvent
数据。
上下文对象示例
11.4.4. Python 功能返回值 复制链接链接已复制到粘贴板!
功能可以返回 Flask 支持的任何值。这是因为调用框架将这些值直接代理到 Flask 服务器。
示例
def main(context: Context): body = { "message": "Howdy!" } headers = { "content-type": "application/json" } return body, 200, headers
def main(context: Context):
body = { "message": "Howdy!" }
headers = { "content-type": "application/json" }
return body, 200, headers
功能可以将标头和响应代码设置为从函数调用的次要和第三响应值。
11.4.4.1. 返回 CloudEvents 复制链接链接已复制到粘贴板!
开发人员可以使用 @event
decorator 告知调用器,在发送响应前,函数返回值必须转换为 CloudEvent。
示例
这个示例发送 CloudEvent 作为响应值,类型为 "my.type"
,源是 "/my/function"
。CloudEvent data
属性设置为返回的 data
变量。event_source
和 event_type
decorator 属性都是可选的。
11.4.5. 测试 Python 功能 复制链接链接已复制到粘贴板!
您可以在计算机上本地测试 Python 功能。default 项目包含一个 test_func.py
文件,它为函数提供了一个简单的单元测试。
Python 功能的默认测试框架是 unittest
。如果您愿意,可以使用不同的测试框架。
先决条件
要在本地运行 Python 功能测试,您必须安装所需的依赖项:
pip install -r requirements.txt
$ pip install -r requirements.txt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
-
导航到包含
test_func.py
文件的函数的文件夹。 运行测试:
python3 test_func.py
$ python3 test_func.py
Copy to Clipboard Copied! Toggle word wrap Toggle overflow