gpt4 book ai didi

python - 如何正确处理访问 key 中包含 '/' 字符的 Celery 和 Azure 存储队列?

转载 作者:行者123 更新时间:2023-12-04 10:31:38 28 4
gpt4 key购买 nike

我正在使用语法创建一个 Celery 应用程序

celery_app = Celery(
my_config_name,
backend=my_backend,
broker=my_broker,
)

对于 my_broker ,我正在使用读取的 Azure 存储帐户的地址
my_broker = "azurestoragequeues://:jrIEoHgyi7y8L7dJ+0CeYGnR9rHLwzMRsKzrmUle7ZL8OA/EaO5aBxqEYSB2VPXJ2v4C58D==@myazurequeue"

并注意密码位包含一个“/”(这是相应的访问 key ,也可以在 Azure 门户中读取)。

如果我运行我的代码,我会得到
ValueError: invalid literal for int() with base 10: 'jrIEoHgyi7y8L7dJ+0CeYGnR9rHLwzMRsKzrmUle7ZL8OA'

这与我遇到的错误相同
from kombu.utils.url import parse_url
parse_url(my_broker)

一种似乎有效的修复方法是
from kombu.utils.url import safequote
my_broker_fixed = "azurestoragequeues://:" + safequote(str.replace(my_broker, "azurestoragequeues://:", ""), safe = "=@")

它只能对访问 key 中的“/”字符进行编码(但不能在地址的其余部分中)。
这在触发 parse_url(my_broker) 时也能很好地解析因为它产生
{'hostname': 'myazurequeue',
'password': 'jrIEoHgyi7y8L7dJ+0CeYGnR9rHLwzMRsKzrmUle7ZL8OA/EaO5aBxqEYSB2VPXJ2v4C58D==',
'port': None,
'transport': 'azurestoragequeues',
'userid': None,
'virtual_host': None}

这似乎是一种解决方法,但是有更好的解决方法吗?

最佳答案

密码是传输连接中需要安全引用的部分。

将连接的用户名、密码、主机名存储为环境变量,并在您的应用程序中读取它们。

from kombu.utils.url import safequote

TRANSPORT_USER = os.getenv('TRANSPORT_USER'),
TRANSPORT_PASS = safequote(os.getenv('TRANSPORT_PASS')),
TRANSPORT_HOST = os.getenv('TRANSPORT_HOST')

my_broker = f'azurestoragequeues://{TRANSPORT_USER}:{TRANSPORT_PASS}@{TRANSPORT_HOST}'

关于python - 如何正确处理访问 key 中包含 '/' 字符的 Celery 和 Azure 存储队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60394534/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com