Skip to content

Commit 549dc30

Browse files
committed
Move union type checking to the loop
1 parent dd0d48f commit 549dc30

File tree

1 file changed

+14
-26
lines changed

1 file changed

+14
-26
lines changed

python/cocoindex/typing.py

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -127,16 +127,20 @@ def analyze_type_info(t: Any) -> AnalyzedTypeInfo:
127127
t = t.__origin__
128128
elif base_type is types.UnionType:
129129
possible_types = typing.get_args(t)
130-
non_none_types = [
131-
arg for arg in possible_types if arg not in (None, types.NoneType)
132-
]
133-
if len(non_none_types) != 1:
134-
raise ValueError(
135-
f"Expect exactly one non-None choice for Union type, but got {len(non_none_types)}: {t}"
136-
)
137-
t = non_none_types[0]
138-
if len(possible_types) > 1:
139-
nullable = True
130+
non_none_types = [arg for arg in possible_types if arg not in (None, types.NoneType)]
131+
132+
if len(non_none_types) == 0:
133+
return analyze_type_info(None)
134+
135+
nullable = len(non_none_types) < len(possible_types)
136+
137+
if len(non_none_types) == 1:
138+
result = analyze_type_info(non_none_types[0])
139+
result.nullable = nullable
140+
return result
141+
142+
kind = 'Union'
143+
union_variant_types = non_none_types
140144
else:
141145
break
142146

@@ -185,22 +189,6 @@ def analyze_type_info(t: Any) -> AnalyzedTypeInfo:
185189
args = typing.get_args(t)
186190
elem_type = (args[0], args[1])
187191
kind = 'KTable'
188-
elif base_type is types.UnionType:
189-
possible_types = typing.get_args(t)
190-
non_none_types = [arg for arg in possible_types if arg not in (None, types.NoneType)]
191-
192-
if len(non_none_types) == 0:
193-
return analyze_type_info(None)
194-
195-
nullable = len(non_none_types) < len(possible_types)
196-
197-
if len(non_none_types) == 1:
198-
result = analyze_type_info(non_none_types[0])
199-
result.nullable = nullable
200-
return result
201-
202-
kind = 'Union'
203-
union_variant_types = non_none_types
204192
elif kind is None:
205193
if t is bytes:
206194
kind = "Bytes"

0 commit comments

Comments
 (0)