@@ -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