Skip to content

Commit

Permalink
{Core}: 'aaz': Copy default and blank values in arguments (#23422)
Browse files Browse the repository at this point in the history
* copy default and blank values in arguments

* add copy and deepcopy operations for AAZBlankArgValue and AAZUndefined
  • Loading branch information
kairu-ms authored Aug 3, 2022
1 parent 5b6ff73 commit 85d48c8
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 7 deletions.
3 changes: 2 additions & 1 deletion src/azure-cli-core/azure/cli/core/aaz/_arg.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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=copy.deepcopy(self._default),
)
if self._arg_group:
arg.arg_group = self._arg_group
Expand Down
13 changes: 7 additions & 6 deletions src/azure-cli-core/azure/cli/core/aaz/_arg_action.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

# pylint: disable=protected-access

import copy
import os
from argparse import Action
from collections import OrderedDict
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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):
Expand Down Expand Up @@ -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:
Expand All @@ -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:
Expand Down Expand Up @@ -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 = []
Expand Down Expand Up @@ -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:
Expand Down
12 changes: 12 additions & 0 deletions src/azure-cli-core/azure/cli/core/aaz/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -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, '<')

Expand Down Expand Up @@ -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, '<')

Expand Down

0 comments on commit 85d48c8

Please sign in to comment.