mirror of https://github.com/celery/kombu.git
Allow azurestoragequeues transport to be used with Azurite emulator in docker-compose (#1611)
* Parse credential as a dict when using Azurite emulator This more flexible credential allows the use of Azurite for integration testing in local docker-compose configurations. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix some lint errors Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
c7615fc537
commit
22b559684f
|
@ -178,7 +178,7 @@ class Transport(virtual.Transport):
|
|||
can_parse_url = True
|
||||
|
||||
@staticmethod
|
||||
def parse_uri(uri: str) -> tuple[str, str]:
|
||||
def parse_uri(uri: str) -> tuple[str | dict, str]:
|
||||
# URL like:
|
||||
# azurestoragequeues://STORAGE_ACCOUNT_ACCESS_KEY@STORAGE_ACCOUNT_URL
|
||||
# azurestoragequeues://SAS_TOKEN@STORAGE_ACCOUNT_URL
|
||||
|
@ -192,6 +192,13 @@ class Transport(virtual.Transport):
|
|||
# > 'some/key', 'url'
|
||||
credential, url = uri.rsplit('@', 1)
|
||||
|
||||
# parse credential as a dict if Azurite is being used
|
||||
if "devstoreaccount1" in url and ".core.windows.net" not in url:
|
||||
credential = {
|
||||
"account_name": "devstoreaccount1",
|
||||
"account_key": credential,
|
||||
}
|
||||
|
||||
# Validate parameters
|
||||
assert all([credential, url])
|
||||
except Exception:
|
||||
|
|
|
@ -11,6 +11,8 @@ from kombu.transport import azurestoragequeues # noqa
|
|||
|
||||
URL_NOCREDS = 'azurestoragequeues://'
|
||||
URL_CREDS = 'azurestoragequeues://sas/key%@https://STORAGE_ACCOUNT_NAME.queue.core.windows.net/' # noqa
|
||||
AZURITE_CREDS = 'azurestoragequeues://Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==@http://localhost:10001/devstoreaccount1' # noqa
|
||||
AZURITE_CREDS_DOCKER_COMPOSE = 'azurestoragequeues://Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==@http://azurite:10001/devstoreaccount1' # noqa
|
||||
|
||||
|
||||
def test_queue_service_nocredentials():
|
||||
|
@ -31,3 +33,22 @@ def test_queue_service():
|
|||
# Check the SAS token "sas/key%" has been parsed from the url correctly
|
||||
assert channel._credential == 'sas/key%'
|
||||
assert channel._url == 'https://STORAGE_ACCOUNT_NAME.queue.core.windows.net/' # noqa
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"creds, hostname",
|
||||
[
|
||||
(AZURITE_CREDS, 'localhost'),
|
||||
(AZURITE_CREDS_DOCKER_COMPOSE, 'azurite'),
|
||||
]
|
||||
)
|
||||
def test_queue_service_works_for_azurite(creds, hostname):
|
||||
conn = Connection(creds, transport=azurestoragequeues.Transport)
|
||||
with patch('kombu.transport.azurestoragequeues.QueueServiceClient'):
|
||||
channel = conn.channel()
|
||||
|
||||
assert channel._credential == {
|
||||
'account_name': 'devstoreaccount1',
|
||||
'account_key': 'Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==' # noqa
|
||||
}
|
||||
assert channel._url == f'http://{hostname}:10001/devstoreaccount1' # noqa
|
||||
|
|
Loading…
Reference in New Issue