async def METHOD_NAME(
    cls,
    parsers: Dict[str, "BaseConfigLoader"],
    exit_stack: contextlib.AsyncExitStack,
    path: pathlib.Path,
    *,
    base_dir: Optional[pathlib.Path] = None,
) -> Dict:
    """
    Load one file and load the ConfigLoader for it if necessary, using the
    AsyncExitStack provided.
    """
    filetype = path.suffix.replace(".", "")
    # Load the parser for the filetype if it isn't already loaded
    if not filetype in parsers:
        # TODO Get configs for loaders from somewhere, probably the
        # config of the multicomm
        loader_cls = cls.load(filetype)
        loader = await exit_stack.enter_async_context(
            loader_cls(BaseConfig())
        )
        parsers[filetype] = await exit_stack.enter_async_context(loader())
    # The config will be stored by its unique filepath split on dirs
    config_path = list(
        path.parts[len(base_dir.parts) :]
        if base_dir is not None
        else path.parts
    )
    # Get rid of suffix for last member of path
    if config_path:
        config_path[-1] = path.stem
    config_path = tuple(config_path)
    # Load the file
    return config_path, await parsers[filetype].loadb(path.read_bytes())