docs: def extract_groups(action_group):
      '''
      Recursively extract argument groups and associated actions
      from ParserGroup objects
      '''
      return {
          'name': action_group.title,
          'description': action_group.description,
          'items': [action for action in action_group._group_actions
                    if not is_help_message(action)],
          'groups': [extract_groups(group)
                     for group in action_group._action_groups],
          'options': merge(group_defaults,
                                 getattr(action_group, 'gooey_options', {}))
      }