Skip to content

Commit 2b87ef2

Browse files
authored
Merge pull request #64 from danjones1618/bugfix/null-parsing
Add NULL type parsing
2 parents f70389b + 52601eb commit 2b87ef2

File tree

4 files changed

+49
-6
lines changed

4 files changed

+49
-6
lines changed

src/openapi_parser/builders/schema.py

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,28 @@
11
import logging
22
from typing import Any, Callable, Dict
33

4-
from .common import extract_extension_attributes, extract_typed_props, merge_schema, PropertyMeta
54
from ..enumeration import DataType, IntegerFormat, NumberFormat, StringFormat
65
from ..errors import ParserError
7-
from ..specification import AnyOf, Array, Boolean, Discriminator, Integer, Number, Object, OneOf, Property, Schema, String
8-
from ..loose_types import (
9-
LooseIntegerFormat,
10-
LooseNumberFormat,
11-
LooseStringFormat,
6+
from ..loose_types import LooseIntegerFormat, LooseNumberFormat, LooseStringFormat
7+
from ..specification import (
8+
AnyOf,
9+
Array,
10+
Boolean,
11+
Discriminator,
12+
Integer,
13+
Null,
14+
Number,
15+
Object,
16+
OneOf,
17+
Property,
18+
Schema,
19+
String,
20+
)
21+
from .common import (
22+
PropertyMeta,
23+
extract_extension_attributes,
24+
extract_typed_props,
25+
merge_schema,
1226
)
1327

1428
SchemaBuilderMethod = Callable[[dict], Schema]
@@ -89,6 +103,7 @@ class SchemaFactory:
89103
def __init__(self, strict_enum: bool = True) -> None:
90104
self.strict_enum = strict_enum
91105
self._builders = {
106+
DataType.NULL: self._null,
92107
DataType.INTEGER: self._integer,
93108
DataType.NUMBER: self._number,
94109
DataType.STRING: self._string,
@@ -128,6 +143,9 @@ def create(self, data: dict) -> Schema:
128143

129144
return builder_func(data)
130145

146+
def _null(self, data: dict) -> Null:
147+
return Null(**extract_attrs(data, {}))
148+
131149
def _integer(self, data: dict) -> Integer:
132150
format_cast = IntegerFormat if self.strict_enum else LooseIntegerFormat
133151
attrs_map = {

src/openapi_parser/enumeration.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
@unique
55
class DataType(Enum):
6+
NULL = 'null'
67
INTEGER = 'integer'
78
NUMBER = 'number'
89
STRING = 'string'

src/openapi_parser/specification.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ class String(Schema):
9494
format: Optional[Union[StringFormat, LooseStringFormat]] = None
9595

9696

97+
@dataclass
98+
class Null(Schema):
99+
pass
100+
101+
97102
@dataclass
98103
class Boolean(Schema):
99104
pass

tests/builders/schema/test_null.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import pytest
2+
3+
from openapi_parser.builders.schema import SchemaFactory
4+
from openapi_parser.specification import DataType, Null
5+
6+
data_provider = (
7+
(
8+
{
9+
"type": "null",
10+
},
11+
Null(type=DataType.NULL)
12+
),
13+
)
14+
15+
16+
@pytest.mark.parametrize(['data', 'expected'], data_provider)
17+
def test_boolean_builder(data: dict, expected: Null) -> None:
18+
factory = SchemaFactory()
19+
assert expected == factory.create(data)

0 commit comments

Comments
 (0)