'This method assumes that iter(self) yields all the data bytes that
go into the response, but none of the MIME stuff. For example, if
the response will contain three MIME docs with data "abcd", "efgh",
and "ijkl", then iter(self) will give out the bytes "abcdefghijkl".
This method inserts the MIME stuff around the data bytes.'

def app_iter_ranges(self, ranges, content_type, boundary, content_size):

    si = Spliterator(self)
    mri = multi_range_iterator(ranges, content_type, boundary, content_size, (lambda start, end_plus_one: si.take((end_plus_one - start))))
    try:
        for x in mri:
            (yield x)
    finally:
        self.close()
