def METHOD_NAME(
    file_path: str, search_dirs: Optional[List[str]] = None, target_fmt: Optional[ConfigFormat] = None
) -> Optional[Config]:
    """Find the configuration for given initial init_file_path and search directories.
        for example, the initial config file path given is config_client.json
        the search function will ignore the .json extension and search "config_client.xxx" in the given directory in
        specified extension search order. The first found file_path will be used as configuration.
        the ".xxx" is one of the extensions defined in the configuration format.
    Args:
        file_path: initial file path
        search_dirs: search directory. If none, the parent directory of init_file_path will be used as search dir
        target_fmt: (ConfigFormat) if specified, only this format searched, ignore all other formats.
    Returns:
        None if not found, or Config
    """
    config_format, real_config_file_path = ConfigFactory.search_config_format(file_path, search_dirs, target_fmt)
    if config_format is not None and real_config_file_path is not None:
        config_loader = ConfigFactory.get_config_loader(config_format)
        if config_loader:
            conf = config_loader.METHOD_NAME(file_path=real_config_file_path)
            return conf
        else:
            return None
    return None