def METHOD_NAME(cls, res, request_cls=None, logger=None, service=None, action=None, session=None):
    """ From requests result """
    response_cls = get_response_cls(request_cls)
    if res is None:
        return cls._make_raw_response(
            request_cls=request_cls,
            service=service,
            action=action
        )
    try:
        data = res.json()
    except ValueError:
        return cls._make_raw_response(
            request_cls=request_cls,
            service=service,
            action=action,
            status_code=res.status_code,
            text=res.text
        )
    if 'meta' not in data:
        raise ValueError('Missing meta section in response payload')
    try:
        meta = ResponseMeta(**data['meta'])
        # TODO: validate meta?
        # meta.validate()
    except Exception as ex:
        raise ValueError('Failed parsing meta section in response payload (data=%s, error=%s)' % (data, ex))
    response = None
    response_data = None
    try:
        response_data = data.get('data', {})
        if response_cls:
            response = response_cls(**response_data)
            # TODO: validate response?
            # response.validate()
    except Exception as e:
        if logger:
            logger.warning('Failed parsing response: %s' % str(e))
    return cls(meta=meta, response=response, response_data=response_data, request_cls=request_cls, session=session)