Skip to content

Commit c633a56

Browse files
authored
Merge pull request #589 from koxudaxi/support-datamodel-code-generator-0.59
Support datamodel-code-generator 0.59
2 parents a1e6ae2 + f3405b5 commit c633a56

5 files changed

Lines changed: 46 additions & 15 deletions

File tree

fastapi_code_generator/parser.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -644,22 +644,27 @@ def _has_non_object_discriminator_variant(self, obj: JsonSchemaObject) -> bool:
644644
)
645645

646646
def _is_object_discriminator_variant(
647-
self, schema: JsonSchemaObject, seen_refs: set[str] | None = None
647+
self, schema: JsonSchemaObject | bool, seen_refs: set[str] | None = None
648648
) -> bool:
649+
if not isinstance(schema, JsonSchemaObject):
650+
return False
651+
schema_obj = schema
649652
if seen_refs is None:
650653
seen_refs = set()
651-
if schema.ref:
652-
if schema.ref in seen_refs:
654+
if schema_obj.ref:
655+
if schema_obj.ref in seen_refs:
653656
return False
654-
seen_refs.add(schema.ref)
655-
schema = JsonSchemaObject.model_validate(self.get_ref_model(schema.ref))
656-
if schema.is_object or schema.properties:
657+
seen_refs.add(schema_obj.ref)
658+
schema_obj = JsonSchemaObject.model_validate(
659+
self.get_ref_model(schema_obj.ref)
660+
)
661+
if schema_obj.is_object or schema_obj.properties:
657662
return True
658-
if not schema.allOf:
663+
if not schema_obj.allOf:
659664
return False
660665
return any(
661666
self._is_object_discriminator_variant(member, seen_refs.copy())
662-
for member in schema.allOf
667+
for member in schema_obj.allOf
663668
)
664669

665670
def _get_upload_file_type(

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ classifiers = [
2828
dynamic = ["version"]
2929
dependencies = [
3030
"click>=8.1.8,<8.2",
31-
"datamodel-code-generator[http]>=0.56.1,<0.57",
31+
"datamodel-code-generator[http]>=0.59,<0.60",
3232
"jinja2>=2.11.2,<4",
3333
"pydantic>=2.12,<3",
3434
"pysnooper>=0.4.1,<2",

tests/data/expected/openapi/default_template/shadowed_imports/main.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from __future__ import annotations
66

7-
from datetime import date as date_aliased
7+
from datetime import date
88
from typing import Optional
99

1010
from fastapi import FastAPI
@@ -17,5 +17,5 @@
1717

1818

1919
@app.get('/actions/', response_model=None)
20-
def get_actions_(due: Optional[date_aliased] = None) -> None:
20+
def get_actions_(due: Optional[date] = None) -> None:
2121
pass

tests/test_parser.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,3 +314,29 @@ def test_get_field_extras_checks_one_of_and_any_of_variants() -> None:
314314
},
315315
{},
316316
)
317+
318+
319+
def test_get_field_extras_removes_discriminator_for_boolean_variant() -> None:
320+
parser = OpenAPIParser(
321+
"openapi: 3.0.0\ninfo: {title: Test, version: '1.0'}\npaths: {}\n"
322+
)
323+
assert_field_extras(
324+
parser,
325+
{
326+
"oneOf": [
327+
True,
328+
{
329+
"type": "object",
330+
"properties": {
331+
"kind": {
332+
"type": "string",
333+
},
334+
},
335+
},
336+
],
337+
"discriminator": {
338+
"propertyName": "kind",
339+
},
340+
},
341+
{},
342+
)

uv.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)