Как правильно обращаться с очередями Celery и Azure Storage, содержащими символ «/» в ключе доступа? - PullRequest
2 голосов
/ 25 февраля 2020

Я создаю приложение Celery, используя синтаксис

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

Для my_broker, я использую адрес учетной записи хранения Azure, которая читает

my_broker = "azurestoragequeues://:jrIEoHgyi7y8L7dJ+0CeYGnR9rHLwzMRsKzrmUle7ZL8OA/EaO5aBxqEYSB2VPXJ2v4C58D==@myazurequeue"

и обратите внимание, что бит пароля содержит символ '/' (это соответствующий ключ доступа, который также можно прочитать на портале 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 = "=@")

, которое может кодировать символ '/' в только ключ доступа (но не в остальной части адреса). Это также хорошо разбирает при стрельбе parse_url(my_broker), так как это дает

{'hostname': 'myazurequeue',
 'password': 'jrIEoHgyi7y8L7dJ+0CeYGnR9rHLwzMRsKzrmUle7ZL8OA/EaO5aBxqEYSB2VPXJ2v4C58D==',
 'port': None,
 'transport': 'azurestoragequeues',
 'userid': None,
 'virtual_host': None}

В качестве обходного пути это нормально, но есть ли лучшее решение?

1 Ответ

2 голосов
/ 01 марта 2020

Пароль - это часть транспортного соединения, которую необходимо безопасно заключить в кавычки.

Сохраните имя пользователя, пароль, имя хоста для соединения в качестве переменных среды и прочитайте их в своем приложении.

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}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...