Example #1
0
    def test_on_direct_runner(self):
        class FakeSink(NativeSink):
            """A fake sink outputing a number of elements."""
            def __init__(self):
                self.written_values = []
                self.writer_instance = FakeSinkWriter(self.written_values)

            def writer(self):
                return self.writer_instance

        class FakeSinkWriter(NativeSinkWriter):
            """A fake sink writer for testing."""
            def __init__(self, written_values):
                self.written_values = written_values

            def __enter__(self):
                return self

            def __exit__(self, *unused_args):
                pass

            def Write(self, value):
                self.written_values.append(value)

        with TestPipeline() as p:
            sink = FakeSink()
            p | Create(['a', 'b', 'c']) | _NativeWrite(sink)  # pylint: disable=expression-not-assigned

        self.assertEqual(['a', 'b', 'c'], sorted(sink.written_values))
Example #2
0
  def test_on_direct_runner(self):
    class FakeSink(NativeSink):
      """A fake sink outputing a number of elements."""

      def __init__(self):
        self.written_values = []
        self.writer_instance = FakeSinkWriter(self.written_values)

      def writer(self):
        return self.writer_instance

    class FakeSinkWriter(NativeSinkWriter):
      """A fake sink writer for testing."""

      def __init__(self, written_values):
        self.written_values = written_values

      def __enter__(self):
        return self

      def __exit__(self, *unused_args):
        pass

      def Write(self, value):
        self.written_values.append(value)

    p = TestPipeline()
    sink = FakeSink()
    p | Create(['a', 'b', 'c']) | _NativeWrite(sink)  # pylint: disable=expression-not-assigned
    p.run()

    self.assertEqual(['a', 'b', 'c'], sink.written_values)
Example #3
0
    def test_on_direct_runner(self):
        class FakeSink(NativeSink):
            """A fake sink outputing a number of elements."""
            def __init__(self):
                self.written_values = []
                self.writer_instance = FakeSinkWriter(self.written_values)

            def writer(self):
                return self.writer_instance

        class FakeSinkWriter(NativeSinkWriter):
            """A fake sink writer for testing."""
            def __init__(self, written_values):
                self.written_values = written_values

            def __enter__(self):
                return self

            def __exit__(self, *unused_args):
                pass

            def Write(self, value):
                self.written_values.append(value)

        # Records in-memory writes, only works on Direct runner.
        p = TestPipeline(runner='DirectRunner')
        sink = FakeSink()
        p | Create(['a', 'b', 'c']) | _NativeWrite(sink)  # pylint: disable=expression-not-assigned
        p.run()

        self.assertEqual(['a', 'b', 'c'], sink.written_values)
Example #4
0
 def expand(self, pcoll):
   from apache_beam.runners.dataflow.native_io import iobase as dataflow_io
   if isinstance(self.sink, dataflow_io.NativeSink):
     # A native sink
     return pcoll | 'NativeWrite' >> dataflow_io._NativeWrite(self.sink)
   elif isinstance(self.sink, Sink):
     # A custom sink
     return pcoll | WriteImpl(self.sink)
   elif isinstance(self.sink, ptransform.PTransform):
     # This allows "composite" sinks to be used like non-composite ones.
     return pcoll | self.sink
   else:
     raise ValueError('A sink must inherit iobase.Sink, iobase.NativeSink, '
                      'or be a PTransform. Received : %r', self.sink)
Example #5
0
 def expand(self, pcoll):
   from apache_beam.runners.dataflow.native_io import iobase as dataflow_io
   if isinstance(self.sink, dataflow_io.NativeSink):
     # A native sink
     return pcoll | 'NativeWrite' >> dataflow_io._NativeWrite(self.sink)
   elif isinstance(self.sink, Sink):
     # A custom sink
     return pcoll | WriteImpl(self.sink)
   elif isinstance(self.sink, ptransform.PTransform):
     # This allows "composite" sinks to be used like non-composite ones.
     return pcoll | self.sink
   else:
     raise ValueError('A sink must inherit iobase.Sink, iobase.NativeSink, '
                      'or be a PTransform. Received : %r' % self.sink)
Example #6
0
 def setUp(self):
     self.native_sink = NativeSink()
     self.native_write = _NativeWrite(self.native_sink)
Example #7
0
 def setUp(self):
   self.native_sink = NativeSink()
   self.native_write = _NativeWrite(self.native_sink)