azext_iot/common/deps.py (23 lines of code) (raw):
# coding=utf-8
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
import sys
from os import linesep
from azure.cli.core.azclierror import CLIInternalError
from azext_iot.constants import UAMQP_DEP_NAME, UAMQP_COMPAT_VERSION, VERSION
from azext_iot.common.utility import test_import_and_version
from azext_iot.common.pip import install
from azext_iot.common._homebrew_patch import HomebrewPipPatch
def ensure_uamqp(config, yes=False, repair=False):
if repair or not test_import_and_version(UAMQP_DEP_NAME, UAMQP_COMPAT_VERSION):
if not yes:
input_txt = ('Dependency update ({} {}) required for IoT extension version: {}. {}'
'Continue? (y/n) -> ').format(UAMQP_DEP_NAME, UAMQP_COMPAT_VERSION, VERSION, linesep)
i = input(input_txt)
if i.lower() != 'y':
sys.exit('User has declined update...')
print('Updating required dependency...')
with HomebrewPipPatch():
# The version range defined in this custom_version parameter should be stable
try:
install(UAMQP_DEP_NAME, compatible_version=UAMQP_COMPAT_VERSION)
print('Update complete. Executing command...')
except RuntimeError as e:
print('Failure updating {}. Aborting...'.format(UAMQP_DEP_NAME))
raise CLIInternalError(e)