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
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)
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)