def METHOD_NAME(
    self,
    METHOD_NAME: str,
    variables: Optional[Dict[str, Mapping]] = None,
    headers: Optional[Dict[str, object]] = None,
    asserts_errors: Optional[bool] = True,
    files: Optional[Dict[str, object]] = None,
) -> Union[Coroutine[Any, Any, Response], Response]:
    body = self._build_body(METHOD_NAME, variables, files)
    resp = self.request(body, headers, files)
    data = self._decode(resp, type="multipart" if files else "json")
    response = Response(
        errors=data.get("errors"),
        data=data.get("data"),
        extensions=data.get("extensions"),
    )
    if asserts_errors:
        assert response.errors is None
    return response