in awscli/argprocess.py [0:0]
def _unpack_complex_cli_arg(argument_model, value, cli_name):
type_name = argument_model.type_name
if type_name == 'structure' or type_name == 'map':
if value.lstrip()[0] == '{':
return _unpack_json_cli_arg(argument_model, value, cli_name)
raise ParamError(cli_name, f"Invalid JSON:\n{value}")
elif type_name == 'list':
if isinstance(value, str):
if value.lstrip()[0] == '[':
return _unpack_json_cli_arg(argument_model, value, cli_name)
elif isinstance(value, list) and len(value) == 1:
single_value = value[0].strip()
if single_value and single_value[0] == '[':
return _unpack_json_cli_arg(argument_model, value[0], cli_name)
try:
# There's a couple of cases remaining here.
# 1. It's possible that this is just a list of strings, i.e
# --security-group-ids sg-1 sg-2 sg-3 => ['sg-1', 'sg-2', 'sg-3']
# 2. It's possible this is a list of json objects:
# --filters '{"Name": ..}' '{"Name": ...}'
member_shape_model = argument_model.member
return [
_unpack_cli_arg(member_shape_model, v, cli_name) for v in value
]
except (ValueError, TypeError):
# The list params don't have a name/cli_name attached to them
# so they will have bad error messages. We're going to
# attach the parent parameter to this error message to provide
# a more helpful error message.
raise ParamError(cli_name, value[0])