Skip to content

Commit

Permalink
Change ordering of actions (#1961)
Browse files Browse the repository at this point in the history
* Change ordering of actions

Update the ordering of the actions as the one literal on default option is not working for descriminator properties

* Add test case

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Add test data

* Remove breakpoint

* Remove unused arguments

---------

Co-authored-by: Koudai Aono <koxudaxi@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
3 people authored Sep 26, 2024
1 parent 83ebb6d commit 295b758
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 1 deletion.
2 changes: 1 addition & 1 deletion datamodel_code_generator/parser/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -1370,8 +1370,8 @@ class Processed(NamedTuple):
)
self.__set_default_enum_member(models)
self.__sort_models(models, imports)
self.__set_one_literal_on_default(models)
self.__apply_discriminator_type(models, imports)
self.__set_one_literal_on_default(models)

processed_models.append(
Processed(module, models, init, imports, scoped_model_resolver)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# generated by datamodel-codegen:
# filename: discriminator_enum.yaml
# timestamp: 2019-07-26T00:00:00+00:00

from __future__ import annotations

from enum import Enum
from typing import Literal, Union

from pydantic import BaseModel, Field, RootModel


class RequestVersionEnum(Enum):
v1 = 'v1'
v2 = 'v2'


class RequestBase(BaseModel):
version: RequestVersionEnum


class RequestV1(RequestBase):
request_id: str = Field(..., description='there is description', title='test title')
version: Literal['v1'] = 'v1'


class RequestV2(RequestBase):
version: Literal['v2'] = 'v2'


class Request(RootModel[Union[RequestV1, RequestV2]]):
root: Union[RequestV1, RequestV2] = Field(..., discriminator='version')
28 changes: 28 additions & 0 deletions tests/main/openapi/test_main_openapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -2798,3 +2798,31 @@ def test_main_openapi_msgspec_use_annotated_with_field_constraints():
/ 'msgspec_use_annotated_with_field_constraints.py'
).read_text()
)


@freeze_time('2019-07-26')
def test_main_openapi_discriminator_one_literal_as_default():
with TemporaryDirectory() as output_dir:
output_file: Path = Path(output_dir) / 'output.py'
return_code: Exit = main(
[
'--input',
str(OPEN_API_DATA_PATH / 'discriminator_enum.yaml'),
'--output',
str(output_file),
'--input-file-type',
'openapi',
'--output-model-type',
'pydantic_v2.BaseModel',
'--use-one-literal-as-default',
]
)
assert return_code == Exit.OK
assert (
output_file.read_text()
== (
EXPECTED_OPENAPI_PATH
/ 'discriminator'
/ 'enum_one_literal_as_default.py'
).read_text()
)

0 comments on commit 295b758

Please sign in to comment.