code: def parse_args(self, args=None, namespace=None):
          
          # load the config_manager within the scope of the method that uses it
          # so that we avoid circular references in the outer scope
          from configman.config_manager import ConfigurationManager
  
          configuration_manager = ConfigurationManager(
              definition_source=[self.get_required_config()],
              values_source_list=self.value_source_list,
              argv_source=args,
              app_name=self.prog,
              app_version=self.version,
              app_description=self.description,
              use_auto_help=False,
          )
  
          # it is apparent a common idiom that commandline options may have
          # embedded '-' characters in them.  Configman requires that option
          # follow the Python Identifier rules.  Fortunately, Configman has a
          # class that will perform dynamic translation of keys.  In this
          # code fragment, we fetch the final configuration from configman
          # using a Mapping that will translate keys with '-' into keys with
          # '_' instead.
          conf = configuration_manager.get_config(
              mapping_class=create_key_translating_dot_dict(
                  "HyphenUnderscoreDict",
                  (('-', '_'),)
              )
          )
  
          # here is where we add the values given to "set_defaults" method
          # of argparse.
          if self.configman_subparsers_option:
              subparser_name = conf[self.configman_subparsers_option.name]
              try:
                  conf.update(
                      self.configman_subparsers_option.foreign_data.argparse
                      .subparsers[subparser_name].subparser
                      .extra_defaults
                  )
              except (AttributeError, KeyError):
                  # no extra_defaults skip on
                  pass
  
          if hasattr(self, 'extra_defaults'):
              conf.update(self.extra_defaults)
  
          return conf
docs: this method hijacks the normal argparse Namespace generation,
          shimming configman into the process. The return value will be a
          configman DotDict rather than an argparse Namespace.