docs: def parse_yaml_file(self, path):
          """Parse yaml file at ``path`` and return a dict."""
          with open(path, 'r') as fp:
              data = yaml.safe_load(fp)
  
          if not data:
              return {}
  
          def traverse(namespace, d):
              cfg = {}
              for key, val in d.items():
                  if isinstance(d[key], dict):
                      cfg.update(traverse(namespace + [key], d[key]))
                  else:
                      if not isinstance(val, str):
                          # All values should be double-quoted strings so they
                          # parse as strings; anything else is a configuration
                          # error at parse-time
                          raise ConfigurationError(
                              'Invalid value %r in file %s: values must be double-quoted strings' % (
                                  val, path
                              )
                          )
  
                      cfg['_'.join(namespace + [key]).upper()] = val
  
              return cfg
  
          return traverse([], data)