code: def get_required_config(self):
          
          required_config = Namespace()
          # add current options to a copy of required config
          for k, v in iteritems_breadth_first(self.required_config):
              required_config[k] = v
          # get any option found in any subparsers
          try:
              subparser_namespaces = (
                  self.configman_subparsers_option.foreign_data
                  .argparse.subprocessor_from_string_converter
              )
              subparsers = (
                  self._argparse_subparsers._configman_option.foreign_data
                  .argparse.subparsers
              )
              # each subparser needs to have its configman options set up
              # in the subparser's configman option.  This routine copies
              # the required_config of each subparser into the
              # SubparserFromStringConverter defined above.
              for subparser_name, subparser_data in six.iteritems(subparsers):
                  subparser_namespaces.add_namespace(
                      subparser_name,
                      subparser_data.subparser.get_required_config()
                  )
          except AttributeError:
              # there is no subparser
              pass
          return required_config
docs: because of the exsistance of subparsers, the configman options
          that correspond with argparse arguments are not a constant.  We need
          to produce a copy of the namespace rather than the actual embedded
          namespace.