Yifan Mai created BEAM-8381:
-------------------------------
Summary: Typehints on DoFn subclass are incorrect set on superclass
Key: BEAM-8381
URL: https://issues.apache.org/jira/browse/BEAM-8381
Project: Beam
Issue Type: Bug
Components: sdk-py-core
Reporter: Yifan Mai
Suppose a parent DoFn with typehints is subclassed into a child DoFn with
different typehints. The typehints will be incorrectly set on the parent DoFn
class instead of the child DoFn class, causing type checking errors. This only
happens if the parent already has typehints; if the parent has no typehints,
then the typehints are correctly set on the child.
Here's a example test case. I would expect this example to run successfully,
but instead it fails with {{apache_beam.typehints.decorators.TypeCheckError:
Type hint violation for 'AddOneAndStringify': requires <class 'int'> but got
<class 'str'> for element}}.
{code}
def test_do_fn_pipeline_pipeline_type_check_satisfied_with_subclassing(self):
@with_input_types(int)
@with_output_types(int)
class AddOne(beam.DoFn):
def add_one(elements):
return element + 1
def process(self, element):
return [add_one(element)]
@with_input_types(int)
@with_output_types(str)
class AddOneAndStringify(AddOne):
def process(self, element):
return [str(add_one(element))]
d = (self.p
| 'T' >> beam.Create([1, 2, 3]).with_output_types(int)
| 'AddOne' >> beam.ParDo(AddOne())
| 'AddOneAndStringify' >> beam.ParDo(AddOneAndStringify()))
assert_that(d, equal_to(['3', '4', '5']))
self.p.run()
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)