Skip to content

Commit 176d869

Browse files
committed
v20 - boolean schemas
1 parent 0f8b1ad commit 176d869

File tree

4 files changed

+38
-2
lines changed

4 files changed

+38
-2
lines changed

aiopenapi3/v20/schemas.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Union, Any, Optional
22

3-
from pydantic import Field, PrivateAttr
3+
from pydantic import Field, PrivateAttr, model_validator
44

55
from .general import Reference
66
from .xml import XML
@@ -40,13 +40,23 @@ class Schema(ObjectExtended, SchemaBase):
4040
items: Optional[Union[list[Union["Schema", Reference]], Union["Schema", Reference]]] = Field(default=None)
4141
allOf: list[Union["Schema", Reference]] = Field(default_factory=list)
4242
properties: dict[str, Union["Schema", Reference]] = Field(default_factory=dict)
43-
additionalProperties: Optional[Union[bool, "Schema", Reference]] = Field(default=None)
43+
additionalProperties: Optional[Union["Schema", Reference]] = Field(default=None)
4444

4545
discriminator: Optional[str] = Field(default=None) # 'Discriminator'
4646
readOnly: Optional[bool] = Field(default=None)
4747
xml: Optional[XML] = Field(default=None) # 'XML'
4848
externalDocs: Optional[dict] = Field(default=None) # 'ExternalDocs'
4949
example: Optional[Any] = Field(default=None)
5050

51+
@model_validator(mode="before")
52+
@classmethod
53+
def is_boolean_schema(cls, data: Any) -> Any:
54+
if not isinstance(data, bool):
55+
return data
56+
if data:
57+
return {}
58+
else:
59+
return {"not": {}}
60+
5161
def __getstate__(self):
5262
return SchemaBase.__getstate__(self)

tests/conftest.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,11 @@ def with_schema_additionalProperties_and_named_properties():
440440
yield _get_parsed_yaml("schema-additionalProperties-and-named-properties" ".yaml")
441441

442442

443+
@pytest.fixture
444+
def with_schema_boolean_v20():
445+
yield _get_parsed_yaml("schema-boolean-v20.yaml")
446+
447+
443448
@pytest.fixture
444449
def with_schema_boolean(openapi_version):
445450
yield _get_parsed_yaml("schema-boolean.yaml", openapi_version)
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
swagger: "2.0"
2+
info:
3+
title: baseurl with port
4+
description: baseurl with port
5+
version: 1.0.0
6+
host: api.example.com:81
7+
basePath: /v1
8+
schemes:
9+
- https
10+
11+
consumes: []
12+
produces: []
13+
paths: {}
14+
definitions:
15+
A:
16+
type: object
17+
additionalProperties: true

tests/schema_test.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -754,3 +754,7 @@ def test_schema_boolean(with_schema_boolean):
754754
]:
755755
del v["components"]["schemas"][i]
756756
OpenAPI("/", v)
757+
758+
759+
def test_schema_boolean_v20(with_schema_boolean_v20):
760+
OpenAPI("/", with_schema_boolean_v20)

0 commit comments

Comments
 (0)