|
9 | 9 | "property_from_data", |
10 | 10 | ] |
11 | 11 |
|
12 | | -from itertools import chain |
13 | 12 | from typing import Any, ClassVar, Dict, Generic, Iterable, Iterator, List, Optional, Set, Tuple, TypeVar, Union |
14 | 13 |
|
15 | 14 | import attr |
@@ -352,7 +351,14 @@ def build_union_property( |
352 | 351 | *, data: oai.Schema, name: str, required: bool, schemas: Schemas, parent_name: str, config: Config |
353 | 352 | ) -> Tuple[Union[UnionProperty, PropertyError], Schemas]: |
354 | 353 | sub_properties: List[Property] = [] |
355 | | - for i, sub_prop_data in enumerate(chain(data.anyOf, data.oneOf)): |
| 354 | + |
| 355 | + for i, sub_prop_data in enumerate( |
| 356 | + [ |
| 357 | + data |
| 358 | + for sublists in filter(lambda x: isinstance(x, Iterable), [[], data.anyOf, data.oneOf]) |
| 359 | + for data in sublists |
| 360 | + ] |
| 361 | + ): |
356 | 362 | sub_prop, schemas = property_from_data( |
357 | 363 | name=f"{name}_type{i}", |
358 | 364 | required=required, |
@@ -440,7 +446,11 @@ def _property_from_data( |
440 | 446 | return _property_from_ref(name=name, required=required, parent=None, data=data, schemas=schemas) |
441 | 447 |
|
442 | 448 | # A union of a single reference should just be passed through to that reference (don't create copy class) |
443 | | - sub_data = (data.allOf or []) + data.anyOf + data.oneOf |
| 449 | + sub_data = [ |
| 450 | + data |
| 451 | + for sublists in filter(lambda x: isinstance(x, Iterable), [[], data.allOf, data.anyOf, data.oneOf]) |
| 452 | + for data in sublists |
| 453 | + ] |
444 | 454 | if len(sub_data) == 1 and isinstance(sub_data[0], oai.Reference): |
445 | 455 | return _property_from_ref(name=name, required=required, parent=data, data=sub_data[0], schemas=schemas) |
446 | 456 |
|
|
0 commit comments