From 0e0dde8fc848202e41f86a18f2ba6da034f82bf5 Mon Sep 17 00:00:00 2001 From: Kai Ru Date: Wed, 3 Aug 2022 13:50:29 +0800 Subject: [PATCH 1/2] copy default and blank values in arguments --- src/azure-cli-core/azure/cli/core/aaz/_arg.py | 3 ++- .../azure/cli/core/aaz/_arg_action.py | 13 +++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/azure-cli-core/azure/cli/core/aaz/_arg.py b/src/azure-cli-core/azure/cli/core/aaz/_arg.py index fda163f25aa..d328fe93362 100644 --- a/src/azure-cli-core/azure/cli/core/aaz/_arg.py +++ b/src/azure-cli-core/azure/cli/core/aaz/_arg.py @@ -3,6 +3,7 @@ # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- import abc +import copy from azure.cli.core import azclierror from knack.arguments import CLICommandArgument, CaseInsensitiveList @@ -115,7 +116,7 @@ def to_cmd_arg(self, name): required=self._required if self._default == AAZUndefined else False, help=self._help.get('short-summary', None), id_part=self._id_part, - default=self._default, + default=self._default if self._default == AAZUndefined else copy.deepcopy(self._default), ) if self._arg_group: arg.arg_group = self._arg_group diff --git a/src/azure-cli-core/azure/cli/core/aaz/_arg_action.py b/src/azure-cli-core/azure/cli/core/aaz/_arg_action.py index edd73c6fb5e..01f9006cb48 100644 --- a/src/azure-cli-core/azure/cli/core/aaz/_arg_action.py +++ b/src/azure-cli-core/azure/cli/core/aaz/_arg_action.py @@ -5,6 +5,7 @@ # pylint: disable=protected-access +import copy import os from argparse import Action from collections import OrderedDict @@ -117,7 +118,7 @@ def format_data(cls, data): if data == AAZBlankArgValue: if cls._schema._blank == AAZUndefined: raise AAZInvalidValueError("argument value cannot be blank") - data = cls._schema._blank + data = copy.deepcopy(cls._schema._blank) if isinstance(data, str): # transfer string into correct data @@ -145,7 +146,7 @@ def setup_operations(cls, dest_ops, values, prefix_keys=None): if values is None: if cls._schema._blank == AAZUndefined: raise AAZInvalidValueError("argument cannot be blank") - dest_ops.add(cls._schema._blank, *prefix_keys) + dest_ops.add(copy.deepcopy(cls._schema._blank), *prefix_keys) else: assert isinstance(values, list) for _, key_parts, value in cls.decode_values(values): @@ -209,7 +210,7 @@ def format_data(cls, data): if data == AAZBlankArgValue: if cls._schema._blank == AAZUndefined: raise AAZInvalidValueError("argument value cannot be blank") - data = cls._schema._blank + data = copy.deepcopy(cls._schema._blank) if data is None: if cls._schema._nullable: @@ -236,7 +237,7 @@ def format_data(cls, data): if data == AAZBlankArgValue: if cls._schema._blank == AAZUndefined: raise AAZInvalidValueError("argument value cannot be blank") - data = cls._schema._blank + data = copy.deepcopy(cls._schema._blank) if data is None: if cls._schema._nullable: @@ -284,7 +285,7 @@ def setup_operations(cls, dest_ops, values, prefix_keys=None): if values is None: if cls._schema._blank == AAZUndefined: raise AAZInvalidValueError("argument cannot be blank") - dest_ops.add(cls._schema._blank, *prefix_keys) + dest_ops.add(copy.deepcopy(cls._schema._blank), *prefix_keys) else: assert isinstance(values, list) ops = [] @@ -340,7 +341,7 @@ def format_data(cls, data): if data == AAZBlankArgValue: if cls._schema._blank == AAZUndefined: raise AAZInvalidValueError("argument value cannot be blank") - data = cls._schema._blank + data = copy.deepcopy(cls._schema._blank) if data is None: if cls._schema._nullable: From 85b4a2bae88f3dfc043a4e9b9f2d8e3d6f2c2241 Mon Sep 17 00:00:00 2001 From: Kai Ru Date: Wed, 3 Aug 2022 14:00:53 +0800 Subject: [PATCH 2/2] add copy and deepcopy operations for AAZBlankArgValue and AAZUndefined --- src/azure-cli-core/azure/cli/core/aaz/_arg.py | 2 +- src/azure-cli-core/azure/cli/core/aaz/_base.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/azure-cli-core/azure/cli/core/aaz/_arg.py b/src/azure-cli-core/azure/cli/core/aaz/_arg.py index d328fe93362..2e6f794e9fb 100644 --- a/src/azure-cli-core/azure/cli/core/aaz/_arg.py +++ b/src/azure-cli-core/azure/cli/core/aaz/_arg.py @@ -116,7 +116,7 @@ def to_cmd_arg(self, name): required=self._required if self._default == AAZUndefined else False, help=self._help.get('short-summary', None), id_part=self._id_part, - default=self._default if self._default == AAZUndefined else copy.deepcopy(self._default), + default=copy.deepcopy(self._default), ) if self._arg_group: arg.arg_group = self._arg_group diff --git a/src/azure-cli-core/azure/cli/core/aaz/_base.py b/src/azure-cli-core/azure/cli/core/aaz/_base.py index 4cfe7aa427c..42e11c30fb7 100644 --- a/src/azure-cli-core/azure/cli/core/aaz/_base.py +++ b/src/azure-cli-core/azure/cli/core/aaz/_base.py @@ -65,6 +65,12 @@ def __ne__(self, other): def __bool__(self): return False + def __copy__(self): + return self + + def __deepcopy__(self, *args, **kwargs): + return self + def __lt__(self, other): self._cmp_err(other, '<') @@ -119,6 +125,12 @@ def __ne__(self, other): def __bool__(self): return False + def __copy__(self): + return self + + def __deepcopy__(self, *args, **kwargs): + return self + def __lt__(self, other): self._cmp_err(other, '<')