From a6df8d22185c0e7edb63c2f8073d4f85827163e2 Mon Sep 17 00:00:00 2001 From: Felix Fanghaenel Date: Wed, 31 Jul 2024 11:07:15 +0200 Subject: [PATCH 1/3] feat: Add support for booleans in OpenAPI Schema `const` --- .../schema/openapi_schema_pydantic/schema.py | 4 ++-- tests/test_schema/test_schema.py | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/openapi_python_client/schema/openapi_schema_pydantic/schema.py b/openapi_python_client/schema/openapi_schema_pydantic/schema.py index e2201c6e7..d46b2ab9f 100644 --- a/openapi_python_client/schema/openapi_schema_pydantic/schema.py +++ b/openapi_python_client/schema/openapi_schema_pydantic/schema.py @@ -1,6 +1,6 @@ from typing import Any, Dict, List, Optional, Union -from pydantic import BaseModel, ConfigDict, Field, StrictInt, StrictStr, model_validator +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, model_validator from ..data_type import DataType from .discriminator import Discriminator @@ -36,7 +36,7 @@ class Schema(BaseModel): minProperties: Optional[int] = Field(default=None, ge=0) required: Optional[List[str]] = Field(default=None, min_length=1) enum: Union[None, List[Any]] = Field(default=None, min_length=1) - const: Union[None, StrictStr, StrictInt] = None + const: Union[None, StrictStr, StrictInt, StrictBool] = None type: Union[DataType, List[DataType], None] = Field(default=None) allOf: List[Union[Reference, "Schema"]] = Field(default_factory=list) oneOf: List[Union[Reference, "Schema"]] = Field(default_factory=list) diff --git a/tests/test_schema/test_schema.py b/tests/test_schema/test_schema.py index 4b93f2c42..bfff2aaae 100644 --- a/tests/test_schema/test_schema.py +++ b/tests/test_schema/test_schema.py @@ -12,6 +12,11 @@ def test_nullable_with_allof(): assert schema.allOf == [] +def test_constant_bool(): + schema = Schema.model_validate_json('{"type":"boolean", "enum":[true], "const":true, "default":true}') + assert schema.const is True + + def test_nullable_with_type_list(): schema = Schema.model_validate_json('{"type": ["string", "number"], "nullable": true}') assert schema.type == [DataType.STRING, DataType.NUMBER, DataType.NULL] From 88ced4d483fbe07dd4a31e544b1e91d57f32d431 Mon Sep 17 00:00:00 2001 From: Felix Fanghaenel Date: Wed, 31 Jul 2024 11:14:59 +0200 Subject: [PATCH 2/3] support float as well --- .../schema/openapi_schema_pydantic/schema.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/openapi_python_client/schema/openapi_schema_pydantic/schema.py b/openapi_python_client/schema/openapi_schema_pydantic/schema.py index d46b2ab9f..8135881a4 100644 --- a/openapi_python_client/schema/openapi_schema_pydantic/schema.py +++ b/openapi_python_client/schema/openapi_schema_pydantic/schema.py @@ -1,6 +1,6 @@ from typing import Any, Dict, List, Optional, Union -from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr, model_validator +from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictFloat, StrictInt, StrictStr, model_validator from ..data_type import DataType from .discriminator import Discriminator @@ -36,7 +36,7 @@ class Schema(BaseModel): minProperties: Optional[int] = Field(default=None, ge=0) required: Optional[List[str]] = Field(default=None, min_length=1) enum: Union[None, List[Any]] = Field(default=None, min_length=1) - const: Union[None, StrictStr, StrictInt, StrictBool] = None + const: Union[None, StrictStr, StrictInt, StrictFloat, StrictBool] = None type: Union[DataType, List[DataType], None] = Field(default=None) allOf: List[Union[Reference, "Schema"]] = Field(default_factory=list) oneOf: List[Union[Reference, "Schema"]] = Field(default_factory=list) From 2e360dad7f8d5970f1f402df29aef421669db9f5 Mon Sep 17 00:00:00 2001 From: Dylan Anthony Date: Sun, 25 Aug 2024 00:07:50 -0600 Subject: [PATCH 3/3] Fix type annotation & add changeset --- .changeset/support_const_booleans_and_floats.md | 7 +++++++ openapi_python_client/parser/properties/const.py | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .changeset/support_const_booleans_and_floats.md diff --git a/.changeset/support_const_booleans_and_floats.md b/.changeset/support_const_booleans_and_floats.md new file mode 100644 index 000000000..af00788d1 --- /dev/null +++ b/.changeset/support_const_booleans_and_floats.md @@ -0,0 +1,7 @@ +--- +default: patch +--- + +# Support `const` booleans and floats + +Fixed in PR #1086. Thanks @flxdot! diff --git a/openapi_python_client/parser/properties/const.py b/openapi_python_client/parser/properties/const.py index aec624afd..baccb07a9 100644 --- a/openapi_python_client/parser/properties/const.py +++ b/openapi_python_client/parser/properties/const.py @@ -27,7 +27,7 @@ class ConstProperty(PropertyProtocol): def build( cls, *, - const: str | int, + const: str | int | float | bool, default: Any, name: str, python_name: PythonIdentifier,