'Handle Range Request related headers (RFC7233).  If `Accept-Ranges`
header is valid, and Range Request is processable, we set the headers
as described by the RFC, and wrap the underlying response in a
RangeWrapper.
Returns ``True`` if Range Request can be fulfilled, ``False`` otherwise.
:raises: :class:`~werkzeug.exceptions.RequestedRangeNotSatisfiable`
if `Range` header could not be parsed or satisfied.'

def _process_range_request(self, environ, complete_length=None, accept_ranges=None):

    from werkzeug.exceptions import RequestedRangeNotSatisfiable
    if (accept_ranges is None):
        return False
    self.headers['Accept-Ranges'] = accept_ranges
    if ((not self._is_range_request_processable(environ)) or (complete_length is None)):
        return False
    parsed_range = parse_range_header(environ.get('HTTP_RANGE'))
    if (parsed_range is None):
        raise RequestedRangeNotSatisfiable(complete_length)
    range_tuple = parsed_range.range_for_length(complete_length)
    content_range_header = parsed_range.to_content_range_header(complete_length)
    if ((range_tuple is None) or (content_range_header is None)):
        raise RequestedRangeNotSatisfiable(complete_length)
    content_length = (range_tuple[1] - range_tuple[0])
    if (content_length != complete_length):
        self.headers['Content-Length'] = content_length
        self.content_range = content_range_header
        self.status_code = 206
        self._wrap_response(range_tuple[0], content_length)
        return True
    return False
