Exemplo n.º 1
0
def fetch_stream(chunks, ranges, storage_method, headers=None, **kwargs):
    ranges = ranges or [(None, None)]
    meta_range_list = get_meta_ranges(ranges, chunks)

    for meta_range_dict in meta_range_list:
        for pos in sorted(meta_range_dict.keys()):
            meta_start, meta_end = meta_range_dict[pos]
            if meta_start is not None and meta_end is not None:
                headers['Range'] = http_header_from_ranges(
                    (meta_range_dict[pos], ))
            reader = ChunkReader(iter(chunks[pos]),
                                 READ_CHUNK_SIZE,
                                 headers=headers,
                                 **kwargs)
            try:
                it = reader.get_iter()
            except exc.NotFound as err:
                raise exc.UnrecoverableContent(
                    "Cannot download position %d: %s" % (pos, err))
            except Exception as err:
                raise exc.ServiceUnavailable(
                    "Error while downloading position %d: %s" % (pos, err))
            for part in it:
                for dat in part['iter']:
                    yield dat
Exemplo n.º 2
0
 def read_meta_chunk(self, storage_method, meta_chunk, headers={}):
     handler = ChunkReader(meta_chunk, None, headers)
     stream = handler.get_iter()
     return Response(part_iter_to_bytes_iter(stream), 200)
Exemplo n.º 3
0
 def read_meta_chunk(self, storage_method, meta_chunk):
     headers = {}
     handler = ChunkReader(meta_chunk, headers)
     stream = handler.get_iter()
     return Response(part_iter_to_bytes_iter(stream), 200)