def METHOD_NAME(self, func: Callable, retries: int, timeout: str) -> Response:
    error_template = "[ERROR] ({type}) with ElasticSearch cluster: {e}"
    try:
        result = self._handle_retry(func, retries, timeout)
    except NameError as e:
        logger.error(error_template.format(type="Hostname", e=str(e)))
        raise
    except (ConnectionError, ConnectionTimeout) as e:
        logger.error(error_template.format(type="Connection", e=str(e)))
        raise
    except NotFoundError as e:
        logger.error(error_template.format(type="404 Not Found", e=str(e)))
        raise
    except TransportError as e:
        logger.error(error_template.format(type="Transport", e=str(e)))
        raise
    except Exception as e:
        logger.error(error_template.format(type="Generic", e=str(e)))
        raise
    return result