docs: def read(keypath, configfile=None):
      """
      Reads a value from the configuration file.
  
      Args:
        keypath: str
          Specifies the key for which the value is desired.  It can be a
          hierarchical path.  Example: "section1.subsection.key1"
        configfile: str
          Path to the config file to read.  Defaults to None, in which case
          the application's default config file is used.
  
      Returns:
        value from configuration file
      """
      if configfile in _configs:
          appconfig = _configs[configfile]
      else:
          appconfig = AppConfig(configfile=configfile)
          _configs[configfile] = appconfig
  
      return appconfig.read(keypath)