def check_cython_coder(self, python_field_coders, cython_field_coders, data): from apache_beam.coders.coder_impl import create_InputStream, create_OutputStream from pyflink.fn_execution.beam.beam_stream import BeamInputStream, BeamOutputStream py_flatten_row_coder = coder_impl.FlattenRowCoderImpl( python_field_coders) internal = py_flatten_row_coder.encode(data) beam_input_stream = create_InputStream(internal) input_stream = BeamInputStream(beam_input_stream, beam_input_stream.size()) beam_output_stream = create_OutputStream() cy_flatten_row_coder = coder_impl_fast.FlattenRowCoderImpl( cython_field_coders) value = cy_flatten_row_coder.decode_from_stream(input_stream) output_stream = BeamOutputStream(beam_output_stream) cy_flatten_row_coder.encode_to_stream(value, output_stream) output_stream.flush() generator_result = py_flatten_row_coder.decode_from_stream( create_InputStream(beam_output_stream.get()), False) result = [] for item in generator_result: result.append(item) try: self.assertEqual(result, [data]) except AssertionError: data = [data] self.assertEqual(len(result), len(data)) self.assertEqual(len(result[0]), len(data[0])) for i in range(len(data[0])): if isinstance(data[0][i], float): from pyflink.table.tests.test_udf import float_equal assert float_equal(data[0][i], result[0][i], 1e-6) else: self.assertEqual(data[0][i], result[0][i])
def test_cython_coder_with_wrong_result_type(self): from apache_beam.coders.coder_impl import create_OutputStream from pyflink.fn_execution.beam.beam_stream import BeamOutputStream data = ['1'] cython_field_coders = [ coder_impl_fast.BigIntCoderImpl() for _ in range(len(data)) ] cy_flatten_row_coder = coder_impl_fast.FlattenRowCoderImpl( cython_field_coders) beam_output_stream = create_OutputStream() output_stream = BeamOutputStream(beam_output_stream) with self.assertRaises(TypeError) as context: cy_flatten_row_coder.encode_to_stream(data, output_stream) self.assertIn('an integer is required', str(context.exception))