From aa39d9ee45a8aeb77f4d1a47e161d75c557808a7 Mon Sep 17 00:00:00 2001 From: Vitaly Terentyev Date: Mon, 2 Jun 2025 18:07:01 +0400 Subject: [PATCH 1/2] Add support for iterable type --- sdks/python/apache_beam/coders/row_coder.py | 2 ++ sdks/python/apache_beam/typehints/schemas.py | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/sdks/python/apache_beam/coders/row_coder.py b/sdks/python/apache_beam/coders/row_coder.py index dc473b1d6d7d..520473a117de 100644 --- a/sdks/python/apache_beam/coders/row_coder.py +++ b/sdks/python/apache_beam/coders/row_coder.py @@ -161,6 +161,8 @@ def _nonnull_coder_from_type(field_type): return BytesCoder() elif type_info == "array_type": return IterableCoder(_coder_from_type(field_type.array_type.element_type)) + elif type_info == "iterable_type": + return IterableCoder(_coder_from_type(field_type.iterable_type.element_type)) elif type_info == "map_type": return MapCoder( _coder_from_type(field_type.map_type.key_type), diff --git a/sdks/python/apache_beam/typehints/schemas.py b/sdks/python/apache_beam/typehints/schemas.py index 23cad5813458..de4cdb9fdf75 100644 --- a/sdks/python/apache_beam/typehints/schemas.py +++ b/sdks/python/apache_beam/typehints/schemas.py @@ -538,6 +538,10 @@ def typing_from_runner_api( return LogicalType.from_runner_api( fieldtype_proto.logical_type).language_type() + elif type_info == "iterable_type": + return Sequence[self.typing_from_runner_api( + fieldtype_proto.iterable_type.element_type)] + else: raise ValueError(f"Unrecognized type_info: {type_info!r}") From 6525c511ce9c5342c60cadb5a2e22b9f148ee262 Mon Sep 17 00:00:00 2001 From: Vitaly Terentyev Date: Tue, 3 Jun 2025 19:04:39 +0400 Subject: [PATCH 2/2] Fix formatting --- sdks/python/apache_beam/coders/row_coder.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdks/python/apache_beam/coders/row_coder.py b/sdks/python/apache_beam/coders/row_coder.py index 520473a117de..1becf408cfbf 100644 --- a/sdks/python/apache_beam/coders/row_coder.py +++ b/sdks/python/apache_beam/coders/row_coder.py @@ -162,7 +162,8 @@ def _nonnull_coder_from_type(field_type): elif type_info == "array_type": return IterableCoder(_coder_from_type(field_type.array_type.element_type)) elif type_info == "iterable_type": - return IterableCoder(_coder_from_type(field_type.iterable_type.element_type)) + return IterableCoder( + _coder_from_type(field_type.iterable_type.element_type)) elif type_info == "map_type": return MapCoder( _coder_from_type(field_type.map_type.key_type),