azext_iot/common/_homebrew_patch.py (33 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 os import sys from knack.log import get_logger logger = get_logger(__name__) HOMEBREW_CELLAR_PATH = '/usr/local/Cellar/azure-cli/' def is_homebrew(): return any((p.startswith(HOMEBREW_CELLAR_PATH) for p in sys.path)) # A workaround for https://github.com/Azure/azure-cli/issues/4428 class HomebrewPipPatch(object): CFG_FILE = os.path.expanduser(os.path.join('~', '.pydistutils.cfg')) def __init__(self): self.our_cfg_file = False def __enter__(self): if not is_homebrew(): return if os.path.isfile(HomebrewPipPatch.CFG_FILE): logger.debug("Homebrew patch: The file %s already exists and we will not overwrite it. " "If extension installation fails, temporarily rename this file and try again.", HomebrewPipPatch.CFG_FILE) logger.warning("Unable to apply Homebrew patch for extension installation. " "Attempting to continue anyway...") self.our_cfg_file = False else: logger.debug("Homebrew patch: Temporarily creating %s to support extension installation on Homebrew.", HomebrewPipPatch.CFG_FILE) with open(HomebrewPipPatch.CFG_FILE, "w", encoding="utf-8") as f: f.write("[install]\nprefix=") self.our_cfg_file = True def __exit__(self, exc_type, exc_value, tb): if not is_homebrew(): return if self.our_cfg_file and os.path.isfile(HomebrewPipPatch.CFG_FILE): logger.debug("Homebrew patch: Deleting the temporarily created %s", HomebrewPipPatch.CFG_FILE) os.remove(HomebrewPipPatch.CFG_FILE)