def METHOD_NAME(self, key: str, *, default: str = None) -> str:
    """
    Return the string referred to by the given key if it exists, or the default.
    Implements :meth:`AbstractConfig.get_str`.
    """
    res = self.__raw_get(key)
    if res is None:
        return default  # type: ignore # Yes it could be None, but we're _assuming_ that people gave us a default
    if not isinstance(res, str):
        raise ValueError(f'unexpected data returned from __raw_get: {type(res)=} {res}')
    return res