Remove packaged release patches (#4688)

* Remove packaged release patches

Removes the following patches:
1. The packaged installs do not support `az component` so we patch this module with appropriate messages.
2. The CLI has a feature that checks PyPI for a command module if it's not installed and the user attempts to run it. This patch disables this as components cannot be installed in packaged installs.

* Fix style
This commit is contained in:
Derek Bekoe 2017-10-17 09:40:56 -07:00 коммит произвёл GitHub
Родитель cbe394bcdd
Коммит 5a4504d85c
7 изменённых файлов: 8 добавлений и 102 удалений

Просмотреть файл

@ -74,16 +74,3 @@ Follow the instructions in the `debian`, `docker`, `windows`, `rpm` and `homebre
--------------------- ---------------------
Modify the packaged release history with release notes on this release and create a PR for this change. Modify the packaged release history with release notes on this release and create a PR for this change.
------------
Info on Patches
---------------
The `patch_*` files in the `patches` subdirectory are useful when creating the patches in the Homebrew formula.
Currently, two patches are applied:
1. The packaged installs do not support `az component` so we patch this module with appropriate messages.
2. The CLI has a feature that checks PyPI for a command module if it's not installed and the user attempts to run it. This patch disables this as components cannot be installed in packaged installs.

Просмотреть файл

@ -1,33 +0,0 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
from azure.cli.core.util import CLIError
MSG_TMPL = """
az component and subcommands are not available with the current Azure CLI installation.
If installed with apt-get, please use 'apt-get update' to update this installation.
If installed with Docker, please use 'docker pull' to update this installation.
If installed with Windows MSI, download the new MSI to update this installation.
{}
"""
def _raise_error(msg):
raise CLIError(MSG_TMPL.format(msg))
def list_components():
""" List the installed components """
_raise_error("Use 'az --version' to list component versions.")
def list_available_components():
""" List publicly available components that can be installed """
_raise_error("No additional components available.")
def remove(component_name):
""" Remove a component """
_raise_error("Components cannot be removed.")
def update(private=False, pre=False, link=None, additional_components=None, allow_third_party=False):
""" Update the CLI and all installed components """
_raise_error("Components cannot be updated.")

Просмотреть файл

@ -1,7 +0,0 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
def handle_module_not_installed(_):
pass

Просмотреть файл

@ -1,28 +0,0 @@
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
# Each package management system should patch this file with their own implementations of these.
from azure.cli.core.util import COMPONENT_PREFIX
import azure.cli.core.azlogging as azlogging
logger = azlogging.get_az_logger(__name__)
def handle_module_not_installed(module_name):
try:
import xmlrpclib
except ImportError:
import xmlrpc.client as xmlrpclib # pylint: disable=import-error
query = {'author': 'Microsoft Corporation', 'author_email': 'azpycli'}
logger.debug("Checking PyPI for modules using query '%s'", query)
client = xmlrpclib.ServerProxy('https://pypi.python.org/pypi')
pypi_hits = client.search(query)
logger.debug("Found %d result(s)", len(pypi_hits))
for hit in pypi_hits:
if hit['name'] == '{}{}'.format(COMPONENT_PREFIX, module_name):
logger.debug("Found module that matches '%s' - %s", module_name, hit)
logger.warning("Install the '%s' module with 'az component update --add %s'",
module_name, module_name)

Просмотреть файл

@ -11,7 +11,6 @@ import argcomplete
import azure.cli.core.telemetry as telemetry import azure.cli.core.telemetry as telemetry
import azure.cli.core._help as _help import azure.cli.core._help as _help
from azure.cli.core.util import CLIError from azure.cli.core.util import CLIError
from azure.cli.core._pkg_util import handle_module_not_installed
import azure.cli.core.azlogging as azlogging import azure.cli.core.azlogging as azlogging
@ -145,27 +144,12 @@ class AzCliCommandParser(argparse.ArgumentParser):
self.subparsers[tuple(path[0:length])] = parent_subparser self.subparsers[tuple(path[0:length])] = parent_subparser
return parent_subparser return parent_subparser
def _handle_command_package_error(self, err_msg): # pylint: disable=no-self-use
if err_msg and err_msg.startswith('argument _command_package: invalid choice:'):
import re
try:
possible_module = re.search("argument _command_package: invalid choice: '(.+?)'",
err_msg).group(1)
handle_module_not_installed(possible_module)
except AttributeError:
# regular expression pattern match failed so unable to retrieve
# module name
pass
except Exception as e: # pylint: disable=broad-except
logger.debug('Unable to handle module not installed: %s', str(e))
def validation_error(self, message): def validation_error(self, message):
telemetry.set_user_fault('validation error') telemetry.set_user_fault('validation error')
return super(AzCliCommandParser, self).error(message) return super(AzCliCommandParser, self).error(message)
def error(self, message): def error(self, message):
telemetry.set_user_fault('parse error: {}'.format(message)) telemetry.set_user_fault('parse error: {}'.format(message))
self._handle_command_package_error(message)
args = {'prog': self.prog, 'message': message} args = {'prog': self.prog, 'message': message}
logger.error('%(prog)s: error: %(message)s', args) logger.error('%(prog)s: error: %(message)s', args)
self.print_usage(sys.stderr) self.print_usage(sys.stderr)

Просмотреть файл

@ -9,6 +9,7 @@ from six import StringIO
from azure.cli.core.util import CLIError from azure.cli.core.util import CLIError
from azure.cli.core._config import az_config from azure.cli.core._config import az_config
import azure.cli.core.azlogging as azlogging import azure.cli.core.azlogging as azlogging
from azure.cli.core.prompting import prompt_y_n, NoTTYException
logger = azlogging.get_az_logger(__name__) logger = azlogging.get_az_logger(__name__)
@ -18,6 +19,13 @@ COMPONENT_PREFIX = 'azure-cli-'
def _deprecate_warning(): def _deprecate_warning():
logger.warning("The 'component' commands will be deprecated in the future.") logger.warning("The 'component' commands will be deprecated in the future.")
logger.warning("az component and subcommands may not work unless the CLI is installed with pip.")
try:
ans = prompt_y_n("Are you sure you want to continue?", default='n')
if not ans:
raise CLIError('Operation cancelled.')
except NoTTYException:
pass
def _verify_not_dev(): def _verify_not_dev():

Просмотреть файл

@ -38,11 +38,6 @@ class Patch(object): # pylint: disable=too-few-public-methods
PATCHES = [ PATCHES = [
Patch(os.path.join('packaged_releases', 'patches', 'patch_pkg_util.py'),
os.path.join('src', 'azure-cli-core', 'azure', 'cli', 'core', '_pkg_util.py')),
Patch(os.path.join('packaged_releases', 'patches', 'patch_component_custom.py'),
os.path.join('src', 'command_modules', 'azure-cli-component', 'azure', 'cli',
'command_modules', 'component', 'custom.py'))
] ]