docs: def get_config(filepath=None, default_loader=None, on_missing=None):
      """Get a dict for the current birding configuration.
  
      The resulting dictionary is fully populated with defaults, such that all
      valid keys will resolve to valid values. Invalid and extra values in the
      configuration result in an exception.
  
      See :ref:`config` (module-level docstring) for discussion on how birding
      configuration works, including filepath loading. Note that a non-default
      filepath set via env results in a :py:exc:`OSError` when the file is
      missing, but the default filepath is ignored when missing.
  
      This function caches its return values as to only parse configuration once
      per set of inputs. As such, treat the resulting dictionary as read-only as
      not to accidentally write values which will be seen by other handles of the
      dictionary.
  
      Args:
          filepath (str): path to birding configuration YAML file.
          default_loader (callable):
              callable which returns file descriptor with YAML data of default
              configuration values
          on_missing (callable): callback to call when file is missing.
      Returns:
          dict: dict of current birding configuration; treat as read-only.
  
      """
      # Handle cache lookup explicitly in order to support keyword arguments.
      cache_key = (filepath, default_loader, on_missing)
      if CACHE.get(cache_key) is not None:
          return CACHE.get(cache_key)
  
      logger = logging.getLogger('birding')
  
      if filepath is None:
          filepath = BIRDING_CONF
      if default_loader is None:
          default_loader = get_defaults_file
      if on_missing is None:
          on_missing = logger.info
  
      logger.info(
          'Looking for configuration file: {}'.format(os.path.abspath(filepath)))
      if not os.path.exists(filepath):
          # Log a message if filepath is default; raise error if not default.
          on_missing('No {} configuration file found.'.format(filepath))
          if filepath != BIRDING_CONF_DEFAULT:
              # Stat the missing file to result in OSError.
              os.stat(filepath)
  
      config = yaml.safe_load(default_loader())
      tv.validate(SCHEMA, config)
      if os.path.exists(filepath):
          file_config = yaml.safe_load(open(filepath))
          if file_config:
              config = overlay(file_config, config)
              tv.validate(SCHEMA, config)
  
      CACHE.put(cache_key, config)
  
      return config