diff --git a/awscli/argprocess.py b/awscli/argprocess.py index b88ecdc7ba1b..fdc5eee8ba85 100644 --- a/awscli/argprocess.py +++ b/awscli/argprocess.py @@ -539,7 +539,11 @@ def _list_docs(self, argument_model, stack): def _map_docs(self, argument_model, stack): k = argument_model.key - value_docs = self._shorthand_docs(argument_model.value, stack) + stack.append(argument_model.value.name) + try: + value_docs = self._shorthand_docs(argument_model.value, stack) + finally: + stack.pop() start = 'KeyName1=%s,KeyName2=%s' % (value_docs, value_docs) if k.enum and not stack: start += '\n\nWhere valid key names are:\n' diff --git a/tests/unit/test_argprocess.py b/tests/unit/test_argprocess.py index 468c3a0a517c..fe5eb531f301 100644 --- a/tests/unit/test_argprocess.py +++ b/tests/unit/test_argprocess.py @@ -869,6 +869,24 @@ def test_skip_deeply_nested_shorthand(self): generated_example = self.get_generated_example_for(argument) self.assertEqual(generated_example, '') + def test_structure_within_map(self): + argument = self.create_argument( + { + 'A': { + 'type': 'map', + 'key': {'type': 'string'}, + 'value': { + 'type': 'structure', + 'members': { + 'B': {'type': 'string'}, + }, + }, + }, + } + ) + generated_example = self.get_generated_example_for(argument) + self.assertEqual('A={KeyName1={B=string},KeyName2={B=string}}', generated_example) + class TestUnpackJSONParams(BaseArgProcessTest): def setUp(self):