python - 在运行时为云函数 GCP 重命名 python 函数 def
问题描述
在 GCP nodejs 云函数中,我使用 dotenv 在运行时以简单模式重命名触发器调用的函数:我通过 dotenv-yaml 从 env_TEST.yml 配置文件中读取部署函数的名称,具体取决于 yaml 文件中的 ENVIRONMENT 变量我将拥有
- PROD 云函数触发器称为 prod_fixNameFunction
- UAT 云函数触发器称为 uat_fixNameFunction
- 名为 test_fixNameFunction 的 TEST 云函数触发器
因为我有 3 个 .env_PROD.yml .env_UAT.yml 和 .env_TEST.yml 文件,其中 ENVIRONMENT 变量在 dotenv 加载的 ENVIRONMENT 变量中设置了 PROD、UAT 和 TEST。
要使用的代码示例:
require('dotenv-yaml')**.config({ path: '.env_TEST.yml' })**;
const prefix = process.env.ENVIRONMENT === "PROD"
? "prod_"
: (process.env.ENVIRONMENT === "UAT"
? "uat_"
: "test_"
);
exports[`${prefix}fixNameFunction`] = async (req, res) => {
...
...
}
.config({ path: '.env_TEST.yml' }) 的部分仅用于本地开发本地云功能与谷歌库函数框架 nodejs 和其他语言。
这对于在云函数中部署具有不同名称的云函数并使用正确的名称 prod_functionName 和 uat_functionName 和 test_functionName 触发非常有用,在这种情况下,您将拥有 3 个适用于 TEST、UAT 和 PROD 环境的函数,并且所有环境参数都已正确加载。
通过gitLab CI/CD gitlab-ci.yml我传递正确的 env 文件以使用 (env_TEST.yml, env_UAT.yml, env_PROD.yml),具体取决于启动管道的标签名称。
我看到存在dotenv-python来加载环境变量,但是我在运行时找不到一个示例来重命名 python 的 def 函数,参数由 dotenv-python 库或其他库读取。
有人有一个解决方案可以在 python 中正常工作,通过环境变量加载新的函数名称,并将 def functionname 重命名为 [prefix]functionName 作为 nodejs 中的前一个示例,前缀中的环境变量加载?
非常感谢您的支持。
解决方案
你想要的是一个动态函数名。以下是您在 Python 中的操作方式:
def my_function(request):
return "Success"
function_name = "whatever" # Get this from your env file
locals()[function_name] = my_function
然后该whatever()
函数就可以调用了。
推荐阅读
- vue.js - 接收新数据时实体量规刷新(点值)
- ios - 在 iOS 上的百度地图中显示蓝色位置点
- javascript - Google 表单上的打卡和打卡系统
- spatstat - 为 ppp 对象生成聚集的 spatstat 标记
- hyperledger-fabric - 超级账本交易 基于某些第三种资源的参与者权限
- xcode - 无法推断通用参数“值”
- spring - 如何使用 Reactor (Spring WebClient) 进行重复调用?
- c# - 如何手动将库添加到 Visual Studio 2017 项目?
- python - 使用具有外键属性的过滤器,什么是_?
- javascript - Javascript 正则表达式与匹配函数的混淆