Skip to content

Commit beaa1c1

Browse files
committed
Update union types field in Python
1 parent e8b972e commit beaa1c1

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

python/cocoindex/typing.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,12 @@ class AnalyzedTypeInfo:
6868
Analyzed info of a Python type.
6969
"""
7070
kind: str
71-
vector_info: VectorInfo | None # For Vector
72-
elem_type: ElementType | None # For Vector, Table, and Union
71+
vector_info: VectorInfo | None # For Vector
72+
elem_type: ElementType | None # For Vector, and Table
73+
union_variant_types: list[type] | None # For Union
7374

74-
key_type: type | None # For element of KTable
75-
struct_type: type | None # For Struct, a dataclass or namedtuple
75+
key_type: type | None # For element of KTable
76+
struct_type: type | None # For Struct, a dataclass or namedtuple
7677

7778
attrs: dict[str, Any] | None
7879
nullable: bool = False
@@ -113,6 +114,7 @@ def analyze_type_info(t) -> AnalyzedTypeInfo:
113114

114115
struct_type = None
115116
elem_type = None
117+
union_variant_types = None
116118
key_type = None
117119
if _is_struct_type(t):
118120
struct_type = t
@@ -155,7 +157,7 @@ def analyze_type_info(t) -> AnalyzedTypeInfo:
155157
return result
156158

157159
kind = 'Union'
158-
elem_type = typing.Union[*non_none_types]
160+
union_variant_types = non_none_types
159161
elif kind is None:
160162
if t is bytes:
161163
kind = 'Bytes'
@@ -182,6 +184,7 @@ def analyze_type_info(t) -> AnalyzedTypeInfo:
182184
kind=kind,
183185
vector_info=vector_info,
184186
elem_type=elem_type,
187+
union_variant_types=union_variant_types,
185188
key_type=key_type,
186189
struct_type=struct_type,
187190
attrs=attrs,
@@ -236,7 +239,7 @@ def _encode_type(type_info: AnalyzedTypeInfo) -> dict[str, Any]:
236239
if type_info.elem_type is not types.UnionType:
237240
raise ValueError("Union type must have a union-typed element type")
238241
encoded_type['types'] = [
239-
_encode_type(analyze_type_info(typ)) for typ in typing.get_args(type_info.elem_type)
242+
_encode_type(analyze_type_info(typ)) for typ in type_info.union_variant_types
240243
]
241244

242245
elif type_info.kind in TABLE_TYPES:

0 commit comments

Comments
 (0)