Skip to content

Commit cc8d6fa

Browse files
authored
Add support for oneOf union properties in addition to anyOf (#164)
1 parent 16d1a3d commit cc8d6fa

File tree

4 files changed

+7
-6
lines changed

4 files changed

+7
-6
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
88
## 0.5.4 - Unreleased
99
### Additions
1010
- Added support for octet-stream content type (#116)
11-
11+
- Union properties defined using oneOf (#98)
1212

1313
## 0.5.3 - 2020-08-13
1414
### Security

openapi_python_client/parser/properties.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from dataclasses import InitVar, dataclass, field
44
from datetime import date, datetime
5+
from itertools import chain
56
from typing import Any, ClassVar, Dict, Generic, List, Optional, Set, TypeVar, Union
67

78
from .. import schema as oai
@@ -461,9 +462,9 @@ def _property_from_data(
461462
title=data.title or name,
462463
default=data.default,
463464
)
464-
if data.anyOf:
465+
if data.anyOf or data.oneOf:
465466
sub_properties: List[Property] = []
466-
for sub_prop_data in data.anyOf:
467+
for sub_prop_data in chain(data.anyOf, data.oneOf):
467468
sub_prop = property_from_data(name=name, required=required, data=sub_prop_data)
468469
if isinstance(sub_prop, PropertyError):
469470
return PropertyError(detail=f"Invalid property in union {name}", data=sub_prop_data)

openapi_python_client/schema/schema.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ class Schema(BaseModel):
241241
value.
242242
"""
243243

244-
oneOf: Optional[List[Union[Reference, "Schema"]]] = None
244+
oneOf: List[Union[Reference, "Schema"]] = []
245245
"""
246246
**From OpenAPI spec:
247247
Inline or referenced schema MUST be of a [Schema Object](#schemaObject) and not a standard JSON Schema.**
@@ -258,7 +258,7 @@ class Schema(BaseModel):
258258
keyword's value.
259259
"""
260260

261-
anyOf: Optional[List[Union[Reference, "Schema"]]] = None
261+
anyOf: List[Union[Reference, "Schema"]] = []
262262
"""
263263
**From OpenAPI spec:
264264
Inline or referenced schema MUST be of a [Schema Object](#schemaObject) and not a standard JSON Schema.**

tests/test_openapi_parser/test_properties.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,7 @@ def test_property_from_data_array_invalid_items(self, mocker):
710710
def test_property_from_data_union(self, mocker):
711711
name = mocker.MagicMock()
712712
required = mocker.MagicMock()
713-
data = oai.Schema(anyOf=[{"type": "number", "default": "0.0"}, {"type": "integer", "default": "0"},])
713+
data = oai.Schema(anyOf=[{"type": "number", "default": "0.0"}], oneOf=[{"type": "integer", "default": "0"},])
714714
UnionProperty = mocker.patch(f"{MODULE_NAME}.UnionProperty")
715715
FloatProperty = mocker.patch(f"{MODULE_NAME}.FloatProperty")
716716
IntProperty = mocker.patch(f"{MODULE_NAME}.IntProperty")

0 commit comments

Comments
 (0)