diff --git a/src/azure-cli-core/azure/cli/core/_config.py b/src/azure-cli-core/azure/cli/core/_config.py index 46fabd24262..c002a77601d 100644 --- a/src/azure-cli-core/azure/cli/core/_config.py +++ b/src/azure-cli-core/azure/cli/core/_config.py @@ -11,4 +11,3 @@ CONFIG_FILE_NAME = 'config' GLOBAL_CONFIG_PATH = os.path.join(GLOBAL_CONFIG_DIR, CONFIG_FILE_NAME) ENV_VAR_PREFIX = 'AZURE' -DEFAULTS_SECTION = 'defaults' diff --git a/src/azure-cli-core/azure/cli/core/commands/__init__.py b/src/azure-cli-core/azure/cli/core/commands/__init__.py index 6eb4f5604b5..e861b0a231f 100644 --- a/src/azure-cli-core/azure/cli/core/commands/__init__.py +++ b/src/azure-cli-core/azure/cli/core/commands/__init__.py @@ -120,24 +120,11 @@ def __init__(self, loader, name, handler, description=None, table_transformer=No self.confirmation = kwargs.get('confirmation', False) self.command_kwargs = kwargs - def _resolve_default_value_from_cfg_file(self, arg, overrides): - from azure.cli.core._config import DEFAULTS_SECTION - from azure.cli.core.commands.validators import DefaultStr - - if not hasattr(arg.type, 'required_tooling'): - required = arg.type.settings.get('required', False) - setattr(arg.type, 'required_tooling', required) - if 'configured_default' in overrides.settings: - def_config = overrides.settings.pop('configured_default', None) - setattr(arg.type, 'default_name_tooling', def_config) - # same blunt mechanism like we handled id-parts, for create command, no name default - if self.name.split()[-1] == 'create' and overrides.settings.get('metavar', None) == 'NAME': - return - config_value = self.cli_ctx.config.get(DEFAULTS_SECTION, def_config, None) - if config_value: - logger.info("Configured default '%s' for arg %s", config_value, arg.name) - overrides.settings['default'] = DefaultStr(config_value) - overrides.settings['required'] = False + def _resolve_default_value_from_config_file(self, arg, overrides): + # same blunt mechanism like we handled id-parts, for create command, no name default + if self.name.split()[-1] == 'create' and overrides.settings.get('metavar', None) == 'NAME': + return + super(AzCliCommand, self)._resolve_default_value_from_config_file(arg, overrides) def load_arguments(self): super(AzCliCommand, self).load_arguments() @@ -154,19 +141,6 @@ def load_arguments(self): help='Do not wait for the long-running operation to finish.'))) self.arguments.update(cmd_args) - def update_argument(self, param_name, argtype): - from azure.cli.core.commands.validators import DefaultStr, DefaultInt - arg = self.arguments[param_name] - self._resolve_default_value_from_cfg_file(arg, argtype) - arg.type.update(other=argtype) - arg_default = arg.type.settings.get('default', None) - if isinstance(arg_default, str): - arg_default = DefaultStr(arg_default) - elif isinstance(arg_default, int): - arg_default = DefaultInt(arg_default) - if arg_default: - arg.type.settings['default'] = arg_default - def __call__(self, *args, **kwargs): return self.handler(*args, **kwargs) diff --git a/src/azure-cli-core/azure/cli/core/commands/validators.py b/src/azure-cli-core/azure/cli/core/commands/validators.py index a89e8bf4056..5db086822f1 100644 --- a/src/azure-cli-core/azure/cli/core/commands/validators.py +++ b/src/azure-cli-core/azure/cli/core/commands/validators.py @@ -10,6 +10,7 @@ from azure.cli.core.profiles import ResourceType from knack.log import get_logger +from knack.validators import DefaultStr, DefaultInt # pylint: disable=unused-import logger = get_logger(__name__) @@ -118,19 +119,3 @@ def _dest_to_option(dest): forbidden_string = ', '.join(_dest_to_option(x) for x in included_forbidden) error = '{}\n\tnot applicable: {}'.format(error, forbidden_string) raise CLIError(error) - - -class DefaultStr(str): - - def __new__(cls, *args, **kwargs): - instance = str.__new__(cls, *args, **kwargs) - instance.is_default = True - return instance - - -class DefaultInt(int): - - def __new__(cls, *args, **kwargs): - instance = int.__new__(cls, *args, **kwargs) - instance.is_default = True - return instance diff --git a/src/azure-cli-core/azure/cli/core/tests/test_command_with_configured_defaults.py b/src/azure-cli-core/azure/cli/core/tests/test_command_with_configured_defaults.py deleted file mode 100644 index a96e8e2a9b0..00000000000 --- a/src/azure-cli-core/azure/cli/core/tests/test_command_with_configured_defaults.py +++ /dev/null @@ -1,77 +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 __future__ import print_function -import os -import logging -import unittest -import mock -from six import StringIO -import sys - -from azure.cli.core import AzCommandsLoader -from azure.cli.core.commands import AzCliCommand, CliCommandType - -from azure.cli.core.mock import DummyCli - -from knack.config import CLIConfig - - -# a dummy callback for arg-parse -def load_params(_): - pass - - -class TestCommandWithConfiguredDefaults(unittest.TestCase): - - @classmethod - def setUpClass(cls): - # Ensure initialization has occurred correctly - logging.basicConfig(level=logging.DEBUG) - - @classmethod - def tearDownClass(cls): - logging.shutdown() - - def set_up_command_table(self, required_arg=False): - - class TestCommandsLoader(AzCommandsLoader): - - def sample_vm_list(resource_group_name): - return str(resource_group_name) - setattr(sys.modules[__name__], sample_vm_list.__name__, sample_vm_list) - - def load_command_table(self, args): - test_type = CliCommandType(operations_tmpl='{}#{{}}'.format(__name__)) - with self.command_group('test', test_type) as g: - g.command('sample-vm-list', 'sample_vm_list') - return self.command_table - - def load_arguments(self, command): - self.command_table[command].load_arguments() # this loads the arguments via reflection - with self.argument_context('test') as c: - c.argument('resource_group_name', options_list=['--resource-group-name', '-g'], - configured_default='group', required=required_arg) - self._update_command_definitions() # pylint: disable=protected-access - return DummyCli(commands_loader_cls=TestCommandsLoader) - - @mock.patch.dict(os.environ, {'AZURE_DEFAULTS_GROUP': 'myRG'}) - def test_apply_configured_defaults_on_required_arg(self): - io = StringIO() - cli = self.set_up_command_table(required_arg=True) - cli.invoke('test sample-vm-list'.split(), out_file=io) - result = io.getvalue() - self.assertTrue('myRG' in result) - - @mock.patch.dict(os.environ, {'AZURE_DEFAULTS_GROUP': 'myRG'}) - def test_apply_configured_defaults_on_optional_arg(self): - io = StringIO() - cli = self.set_up_command_table(required_arg=False) - cli.invoke('test sample-vm-list'.split(), out_file=io) - result = io.getvalue() - self.assertTrue('myRG' in result) - - -if __name__ == '__main__': - unittest.main() diff --git a/src/azure-cli-core/setup.py b/src/azure-cli-core/setup.py index 2d53a234199..eb6859458ab 100644 --- a/src/azure-cli-core/setup.py +++ b/src/azure-cli-core/setup.py @@ -59,7 +59,7 @@ 'colorama>=0.3.9', 'humanfriendly>=4.7', 'jmespath', - 'knack>=0.5.3', + 'knack~=0.5.4', 'msrest>=0.4.4', 'msrestazure>=0.4.25', 'paramiko>=2.0.8', diff --git a/src/command_modules/azure-cli-configure/azure/cli/command_modules/configure/custom.py b/src/command_modules/azure-cli-configure/azure/cli/command_modules/configure/custom.py index ec3eaf8e943..b8638ccbf8c 100644 --- a/src/command_modules/azure-cli-configure/azure/cli/command_modules/configure/custom.py +++ b/src/command_modules/azure-cli-configure/azure/cli/command_modules/configure/custom.py @@ -129,12 +129,12 @@ def _handle_global_configuration(config): def handle_configure(cmd, defaults=None): if defaults: - from azure.cli.core._config import DEFAULTS_SECTION + defaults_section = cmd.cli_ctx.config.defaults_section_name for default in defaults: parts = default.split('=', 1) if len(parts) == 1: raise CLIError('usage error: --defaults STRING=STRING STRING=STRING ...') - cmd.cli_ctx.config.set_value(DEFAULTS_SECTION, parts[0], _normalize_config_value(parts[1])) + cmd.cli_ctx.config.set_value(defaults_section, parts[0], _normalize_config_value(parts[1])) return # if nothing supplied, we go interactively