[ 
https://issues.apache.org/jira/browse/BEAM-8381?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yifan Mai updated BEAM-8381:
----------------------------
    Summary: Typehints on DoFn subclass are incorrectly set on superclass  
(was: Typehints on DoFn subclass are incorrect set on superclass)

> Typehints on DoFn subclass are incorrectly 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
>            Priority: Minor
>
> 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)

Reply via email to