diff --git a/.gitignore b/.gitignore index 2bad81975ba0..9c6e68f4ce59 100644 --- a/.gitignore +++ b/.gitignore @@ -154,3 +154,4 @@ playground/cloudfunction.zip # Ignore .test-infra/metrics/github_runs_prefetcher/code.zip # as its generated with terraform .test-infra/metrics/sync/github/github_runs_prefetcher/code.zip +.venv/ diff --git a/sdks/python/apache_beam/transforms/external.py b/sdks/python/apache_beam/transforms/external.py index e763439e2287..21a863069e63 100644 --- a/sdks/python/apache_beam/transforms/external.py +++ b/sdks/python/apache_beam/transforms/external.py @@ -804,16 +804,19 @@ def expand(self, pvalueish: pvalue.PCollection) -> pvalue.PCollection: spec=beam_runner_api_pb2.FunctionSpec( urn=common_urns.primitives.IMPULSE.urn), outputs={'out': transform_proto.inputs[tag]})) + + # Retrieve type hints and store them in variables + # to avoid duplicate calls and AttributeError + hints = self.get_type_hints() output_coders = None - if self._type_hints.output_types: - if self._type_hints.output_types[0]: - output_coders = dict( - (str(k), context.coder_id_from_element_type(v)) - for (k, v) in enumerate(self._type_hints.output_types[0])) - elif self._type_hints.output_types[1]: + if hints.output_types: + if hints.output_types[0]: + output_coders = dict((str(k), context.coder_id_from_element_type(v)) + for (k, v) in enumerate(hints.output_types[0])) + elif hints.output_types[1]: output_coders = { k: context.coder_id_from_element_type(v) - for (k, v) in self._type_hints.output_types[1].items() + for (k, v) in hints.output_types[1].items() } components = context.to_runner_api() request = beam_expansion_api_pb2.ExpansionRequest(