# Path: mako/testing/helpers.py
# def make_path(
#     filespec: Union[Path, str],
#     make_absolute: bool = True,
#     check_exists: bool = False,
# ) -> Path:
#     path = Path(filespec)
#     if make_absolute:
#         path = path.resolve(strict=check_exists)
#     if check_exists and (not path.exists()):
#         raise FileNotFoundError(f"No file or directory at {filespec}")
#     return path


import configparser
import dataclasses
from dataclasses import dataclass
from pathlib import Path
from typing import Callable
from typing import ClassVar
from typing import Optional
from typing import Union
from .helpers import make_path

    # support ConfigParser builtins
    getters = {
        int: _build_getter(cfg_obj, cfg_section, "getint"),
        bool: _build_getter(cfg_obj, cfg_section, "getboolean"),
        float: _build_getter(cfg_obj, cfg_section, "getfloat"),
        str: default_getter,
    }

    # use ConfigParser.get and convert value
    getters.update(
        {
            type_: _build_getter(
                cfg_obj, cfg_section, "get", converter=converter_fn
            )
            for type_, converter_fn in converters.items()
        }
    )

    return _GetterDispatch(getters, default_getter)


@dataclass
class ReadsCfg:
    section_header: ClassVar[str]
    converters: ClassVar[Optional[dict]] = None

    @classmethod
    def from_cfg_file(cls, filespec: Union[Path, str]):
        cfg = _parse_cfg_file(filespec)

# Path: mako/testing/helpers.py
# def make_path(
#     filespec: Union[Path, str],
#     make_absolute: bool = True,
#     check_exists: bool = False,
# ) -> Path:
#     path = Path(filespec)
#     if make_absolute:
#         path = path.resolve(strict=check_exists)
#     if check_exists and (not path.exists()):
#         raise FileNotFoundError(f"No file or directory at {filespec}")
#     return path


# Path: mako/testing/_config.py
import configparser
import dataclasses
from dataclasses import dataclass
from pathlib import Path
from typing import Callable
from typing import ClassVar
from typing import Optional
from typing import Union
from .helpers import make_path


    # support ConfigParser builtins
    getters = {
        int: _build_getter(cfg_obj, cfg_section, "getint"),
        bool: _build_getter(cfg_obj, cfg_section, "getboolean"),
        float: _build_getter(cfg_obj, cfg_section, "getfloat"),
        str: default_getter,
    }

    # use ConfigParser.get and convert value
    getters.update(
        {
            type_: _build_getter(
                cfg_obj, cfg_section, "get", converter=converter_fn
            )
            for type_, converter_fn in converters.items()
        }
    )

    return _GetterDispatch(getters, default_getter)


@dataclass
class ReadsCfg:
    section_header: ClassVar[str]
    converters: ClassVar[Optional[dict]] = None

    @classmethod
    def from_cfg_file(cls, filespec: Union[Path, str]):
        cfg = _parse_cfg_file(filespec)

        dispatch = _build_getter_dispatch(