def test_unique_metadata(): source = Stream() L = metadata(source.unique()).flatten().sink_to_list() for i in range(5): source.emit(i, metadata=[{'v': i}]) assert L == [{'v': i} for i in range(5)]
def test_partition_metadata(): source = Stream() L = metadata(source.partition(2)).sink_to_list() source.emit(0) source.emit(1, metadata=[{'v': 1}]) source.emit(2, metadata=[{'v': 2}]) source.emit(3, metadata=[{'v': 3}]) assert L == [ [{'v': 1}], # first emit when 1 is introduced. 0 has no metadata [{'v': 2}, {'v': 3}] # second emit ]
def test_zip_metadata(): a = Stream() b = Stream() L = metadata(a.zip(b)).sink_to_list() a.emit(1, metadata=[{'v': 1}]) b.emit(2, metadata=[{'v': 2}]) a.emit(3) b.emit(4, metadata=[{'v': 4}]) assert L == [ [{'v': 1}, {'v': 2}], # first emit when 2 is introduced [{'v': 4}] # second emit when 4 is introduced, and 3 has no metadata ]
def test_sliding_window_metadata(): source = Stream() L = metadata(source.sliding_window(2)).sink_to_list() source.emit(0) source.emit(1, metadata=[{'v': 1}]) source.emit(2, metadata=[{'v': 2}]) source.emit(3, metadata=[{'v': 3}]) assert L == [ [{'v': 1}], # First emit, because 0 has no metadata [{'v': 1}, {'v': 2}], # Second emit [{'v': 2}, {'v': 3}] # Third emit ]
def test_combine_latest_metadata(): a = Stream() b = Stream() L = metadata(a.combine_latest(b)).sink_to_list() a.emit(1, metadata=[{'v': 1}]) b.emit(2, metadata=[{'v': 2}]) b.emit(3) b.emit(4, metadata=[{'v': 4}]) assert L == [ [{'v': 1}, {'v': 2}], # first emit when 2 is introduced [{'v': 1}], # 3 has no metadata but it replaces the value on 'b' [{'v': 1}, {'v': 4}] # 4 replaces the value without metadata on 'b' ]
def test_timed_window_metadata(): source = Stream() L = metadata(source.timed_window(0.01)).sink_to_list() source.emit(0) source.emit(1, metadata=[{'v': 1}]) yield gen.sleep(0.1) source.emit(2, metadata=[{'v': 2}]) source.emit(3, metadata=[{'v': 3}]) yield gen.sleep(0.1) assert L == [ [{'v': 1}], # first emit because 0 has no metadata [{'v': 2}, {'v': 3}] # second emit ]
def test_collect_metadata(): source = Stream() collector = source.collect() L = metadata(collector).sink_to_list() source.emit(0) source.emit(1, metadata=[{'v': 1}]) source.emit(2, metadata=[{'v': 2}]) collector.flush() source.emit(3, metadata=[{'v': 3}]) source.emit(4, metadata=[{'v': 4}]) collector.flush() assert L == [ [{'v': 1}, {'v': 2}], # Flush 0-2, but 0 has no metadata [{'v': 3}, {'v': 4}] # Flush the rest ]