From 319ee8adacf235d795d744c9ed84af0bd83196cc Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Wed, 31 Dec 2025 20:20:30 +0000 Subject: [PATCH] Consolidate ParserConfig TypedDict profiles with inheritance preservation --- .pre-commit-config.yaml | 2 +- pyproject.toml | 30 +--- .../_types/__init__.py | 10 +- .../_types/graphql_parser_config_dict.py | 149 ------------------ .../_types/jsonschema_parser_config_dict.py | 148 ----------------- .../_types/parser_config_dict.py | 144 ----------------- ..._config_dict.py => parser_config_dicts.py} | 12 +- tox.ini | 5 +- 8 files changed, 26 insertions(+), 474 deletions(-) delete mode 100644 src/datamodel_code_generator/_types/graphql_parser_config_dict.py delete mode 100644 src/datamodel_code_generator/_types/jsonschema_parser_config_dict.py delete mode 100644 src/datamodel_code_generator/_types/parser_config_dict.py rename src/datamodel_code_generator/_types/{openapi_parser_config_dict.py => parser_config_dicts.py} (94%) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d9c96f8cb..8f09051eb 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -39,7 +39,7 @@ repos: pass_filenames: false - id: config-types name: Generate config TypedDicts - entry: bash -c '[ -x .tox/dev/bin/python ] && PREFIX=.tox/dev/bin || PREFIX=.tox/dev/Scripts; test -x "$PREFIX/python" || tox run -e dev --notest -qq; "$PREFIX/datamodel-codegen" --profile generate-config-dict && "$PREFIX/datamodel-codegen" --profile parser-config-dict && "$PREFIX/datamodel-codegen" --profile graphql-parser-config-dict && "$PREFIX/datamodel-codegen" --profile jsonschema-parser-config-dict && "$PREFIX/datamodel-codegen" --profile openapi-parser-config-dict && "$PREFIX/datamodel-codegen" --profile parse-config-dict' + entry: bash -c '[ -x .tox/dev/bin/python ] && PREFIX=.tox/dev/bin || PREFIX=.tox/dev/Scripts; test -x "$PREFIX/python" || tox run -e dev --notest -qq; "$PREFIX/datamodel-codegen" --profile generate-config-dict && "$PREFIX/datamodel-codegen" --profile parser-config-dicts && "$PREFIX/datamodel-codegen" --profile parse-config-dict' language: system files: ^src/datamodel_code_generator/config\.py$ pass_filenames: false diff --git a/pyproject.toml b/pyproject.toml index a0f21fabd..c71b068f2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -274,29 +274,15 @@ input-model = "src/datamodel_code_generator/config.py:GenerateConfig" output = "src/datamodel_code_generator/_types/generate_config_dict.py" class-name = "GenerateConfigDict" -[tool.datamodel-codegen.profiles.parser-config-dict] +[tool.datamodel-codegen.profiles.parser-config-dicts] extends = "config-types-base" -input-model = "src/datamodel_code_generator/config.py:ParserConfig" -output = "src/datamodel_code_generator/_types/parser_config_dict.py" -class-name = "ParserConfigDict" - -[tool.datamodel-codegen.profiles.graphql-parser-config-dict] -extends = "config-types-base" -input-model = "src/datamodel_code_generator/config.py:GraphQLParserConfig" -output = "src/datamodel_code_generator/_types/graphql_parser_config_dict.py" -class-name = "GraphQLParserConfigDict" - -[tool.datamodel-codegen.profiles.jsonschema-parser-config-dict] -extends = "config-types-base" -input-model = "src/datamodel_code_generator/config.py:JSONSchemaParserConfig" -output = "src/datamodel_code_generator/_types/jsonschema_parser_config_dict.py" -class-name = "JSONSchemaParserConfigDict" - -[tool.datamodel-codegen.profiles.openapi-parser-config-dict] -extends = "config-types-base" -input-model = "src/datamodel_code_generator/config.py:OpenAPIParserConfig" -output = "src/datamodel_code_generator/_types/openapi_parser_config_dict.py" -class-name = "OpenAPIParserConfigDict" +input-model = [ + "src/datamodel_code_generator/config.py:ParserConfig", + "src/datamodel_code_generator/config.py:GraphQLParserConfig", + "src/datamodel_code_generator/config.py:JSONSchemaParserConfig", + "src/datamodel_code_generator/config.py:OpenAPIParserConfig", +] +output = "src/datamodel_code_generator/_types/parser_config_dicts.py" [tool.datamodel-codegen.profiles.parse-config-dict] extends = "config-types-base" diff --git a/src/datamodel_code_generator/_types/__init__.py b/src/datamodel_code_generator/_types/__init__.py index 14116e220..979c31a8d 100644 --- a/src/datamodel_code_generator/_types/__init__.py +++ b/src/datamodel_code_generator/_types/__init__.py @@ -3,11 +3,13 @@ from __future__ import annotations from datamodel_code_generator._types.generate_config_dict import GenerateConfigDict -from datamodel_code_generator._types.graphql_parser_config_dict import GraphQLParserConfigDict -from datamodel_code_generator._types.jsonschema_parser_config_dict import JSONSchemaParserConfigDict -from datamodel_code_generator._types.openapi_parser_config_dict import OpenAPIParserConfigDict from datamodel_code_generator._types.parse_config_dict import ParseConfigDict -from datamodel_code_generator._types.parser_config_dict import ParserConfigDict +from datamodel_code_generator._types.parser_config_dicts import ( + GraphQLParserConfig as GraphQLParserConfigDict, + JSONSchemaParserConfig as JSONSchemaParserConfigDict, + OpenAPIParserConfig as OpenAPIParserConfigDict, + ParserConfig as ParserConfigDict, +) __all__ = [ "GenerateConfigDict", diff --git a/src/datamodel_code_generator/_types/graphql_parser_config_dict.py b/src/datamodel_code_generator/_types/graphql_parser_config_dict.py deleted file mode 100644 index 46e72bd90..000000000 --- a/src/datamodel_code_generator/_types/graphql_parser_config_dict.py +++ /dev/null @@ -1,149 +0,0 @@ -# generated by datamodel-codegen: -# filename: - -from __future__ import annotations - -from typing import TYPE_CHECKING, Any, TypedDict - -from typing_extensions import NotRequired - -if TYPE_CHECKING: - from collections import defaultdict - from collections.abc import Callable, Iterable, Mapping, Sequence - from pathlib import Path - - from datamodel_code_generator.enums import ( - AllOfClassHierarchy, - AllOfMergeMode, - CollapseRootModelsNameStrategy, - DataclassArguments, - FieldTypeCollisionStrategy, - NamingStrategy, - ReadOnlyWriteOnlyModelType, - ReuseScope, - StrictTypes, - TargetPydanticVersion, - ) - from datamodel_code_generator.format import DateClassType, DatetimeClassType, Formatter, PythonVersion - from datamodel_code_generator.model.base import DataModel, DataModelFieldBase - from datamodel_code_generator.parser import DefaultPutDict, LiteralType - from datamodel_code_generator.types import DataTypeManager - - -class ParserConfig(TypedDict): - data_model_type: NotRequired[type[DataModel]] - data_model_root_type: NotRequired[type[DataModel]] - data_type_manager_type: NotRequired[type[DataTypeManager]] - data_model_field_type: NotRequired[type[DataModelFieldBase]] - base_class: NotRequired[str | None] - base_class_map: NotRequired[dict[str, str] | None] - additional_imports: NotRequired[list[str] | None] - class_decorators: NotRequired[list[str] | None] - custom_template_dir: NotRequired[Path | None] - extra_template_data: NotRequired[defaultdict[str, dict[str, Any]] | None] - target_python_version: NotRequired[PythonVersion] - dump_resolve_reference_action: NotRequired[Callable[[Iterable[str]], str] | None] - validation: NotRequired[bool] - field_constraints: NotRequired[bool] - snake_case_field: NotRequired[bool] - strip_default_none: NotRequired[bool] - aliases: NotRequired[Mapping[str, str | list[str]] | None] - allow_population_by_field_name: NotRequired[bool] - apply_default_values_for_required_fields: NotRequired[bool] - allow_extra_fields: NotRequired[bool] - extra_fields: NotRequired[str | None] - use_generic_base_class: NotRequired[bool] - force_optional_for_required_fields: NotRequired[bool] - class_name: NotRequired[str | None] - use_standard_collections: NotRequired[bool] - base_path: NotRequired[Path | None] - use_schema_description: NotRequired[bool] - use_field_description: NotRequired[bool] - use_field_description_example: NotRequired[bool] - use_attribute_docstrings: NotRequired[bool] - use_inline_field_description: NotRequired[bool] - use_default_kwarg: NotRequired[bool] - reuse_model: NotRequired[bool] - reuse_scope: NotRequired[ReuseScope | None] - shared_module_name: NotRequired[str] - encoding: NotRequired[str] - enum_field_as_literal: NotRequired[LiteralType | None] - enum_field_as_literal_map: NotRequired[dict[str, str] | None] - ignore_enum_constraints: NotRequired[bool] - set_default_enum_member: NotRequired[bool] - use_subclass_enum: NotRequired[bool] - use_specialized_enum: NotRequired[bool] - strict_nullable: NotRequired[bool] - use_generic_container_types: NotRequired[bool] - enable_faux_immutability: NotRequired[bool] - remote_text_cache: NotRequired[DefaultPutDict[str, str] | None] - disable_appending_item_suffix: NotRequired[bool] - strict_types: NotRequired[Sequence[StrictTypes] | None] - empty_enum_field_name: NotRequired[str | None] - custom_class_name_generator: NotRequired[Callable[[str], str] | None] - field_extra_keys: NotRequired[set[str] | None] - field_include_all_keys: NotRequired[bool] - field_extra_keys_without_x_prefix: NotRequired[set[str] | None] - model_extra_keys: NotRequired[set[str] | None] - model_extra_keys_without_x_prefix: NotRequired[set[str] | None] - wrap_string_literal: NotRequired[bool | None] - use_title_as_name: NotRequired[bool] - use_operation_id_as_name: NotRequired[bool] - use_unique_items_as_set: NotRequired[bool] - use_tuple_for_fixed_items: NotRequired[bool] - allof_merge_mode: NotRequired[AllOfMergeMode] - allof_class_hierarchy: NotRequired[AllOfClassHierarchy] - http_headers: NotRequired[Sequence[tuple[str, str]] | None] - http_ignore_tls: NotRequired[bool] - http_timeout: NotRequired[float | None] - use_annotated: NotRequired[bool] - use_serialize_as_any: NotRequired[bool] - use_non_positive_negative_number_constrained_types: NotRequired[bool] - use_decimal_for_multiple_of: NotRequired[bool] - original_field_name_delimiter: NotRequired[str | None] - use_double_quotes: NotRequired[bool] - use_union_operator: NotRequired[bool] - allow_responses_without_content: NotRequired[bool] - collapse_root_models: NotRequired[bool] - collapse_root_models_name_strategy: NotRequired[CollapseRootModelsNameStrategy | None] - collapse_reuse_models: NotRequired[bool] - skip_root_model: NotRequired[bool] - use_type_alias: NotRequired[bool] - special_field_name_prefix: NotRequired[str | None] - remove_special_field_name_prefix: NotRequired[bool] - capitalise_enum_members: NotRequired[bool] - keep_model_order: NotRequired[bool] - use_one_literal_as_default: NotRequired[bool] - use_enum_values_in_discriminator: NotRequired[bool] - known_third_party: NotRequired[list[str] | None] - custom_formatters: NotRequired[list[str] | None] - custom_formatters_kwargs: NotRequired[dict[str, Any] | None] - use_pendulum: NotRequired[bool] - use_standard_primitive_types: NotRequired[bool] - http_query_parameters: NotRequired[Sequence[tuple[str, str]] | None] - treat_dot_as_module: NotRequired[bool | None] - use_exact_imports: NotRequired[bool] - default_field_extras: NotRequired[dict[str, Any] | None] - target_datetime_class: NotRequired[DatetimeClassType | None] - target_date_class: NotRequired[DateClassType | None] - keyword_only: NotRequired[bool] - frozen_dataclasses: NotRequired[bool] - no_alias: NotRequired[bool] - use_frozen_field: NotRequired[bool] - use_default_factory_for_optional_nested_models: NotRequired[bool] - formatters: NotRequired[list[Formatter]] - defer_formatting: NotRequired[bool] - parent_scoped_naming: NotRequired[bool] - naming_strategy: NotRequired[NamingStrategy | None] - duplicate_name_suffix: NotRequired[dict[str, str] | None] - dataclass_arguments: NotRequired[DataclassArguments | None] - type_mappings: NotRequired[list[str] | None] - type_overrides: NotRequired[dict[str, str] | None] - read_only_write_only_model_type: NotRequired[ReadOnlyWriteOnlyModelType | None] - field_type_collision_strategy: NotRequired[FieldTypeCollisionStrategy | None] - target_pydantic_version: NotRequired[TargetPydanticVersion | None] - - -class GraphQLParserConfigDict(ParserConfig): - data_model_scalar_type: NotRequired[type[DataModel]] - data_model_union_type: NotRequired[type[DataModel]] diff --git a/src/datamodel_code_generator/_types/jsonschema_parser_config_dict.py b/src/datamodel_code_generator/_types/jsonschema_parser_config_dict.py deleted file mode 100644 index 1f079e6aa..000000000 --- a/src/datamodel_code_generator/_types/jsonschema_parser_config_dict.py +++ /dev/null @@ -1,148 +0,0 @@ -# generated by datamodel-codegen: -# filename: - -from __future__ import annotations - -from typing import TYPE_CHECKING, Any, TypedDict - -from typing_extensions import NotRequired - -if TYPE_CHECKING: - from collections import defaultdict - from collections.abc import Callable, Iterable, Mapping, Sequence - from pathlib import Path - - from datamodel_code_generator.enums import ( - AllOfClassHierarchy, - AllOfMergeMode, - CollapseRootModelsNameStrategy, - DataclassArguments, - FieldTypeCollisionStrategy, - NamingStrategy, - ReadOnlyWriteOnlyModelType, - ReuseScope, - StrictTypes, - TargetPydanticVersion, - ) - from datamodel_code_generator.format import DateClassType, DatetimeClassType, Formatter, PythonVersion - from datamodel_code_generator.model.base import DataModel, DataModelFieldBase - from datamodel_code_generator.parser import DefaultPutDict, LiteralType - from datamodel_code_generator.types import DataTypeManager - - -class ParserConfig(TypedDict): - data_model_type: NotRequired[type[DataModel]] - data_model_root_type: NotRequired[type[DataModel]] - data_type_manager_type: NotRequired[type[DataTypeManager]] - data_model_field_type: NotRequired[type[DataModelFieldBase]] - base_class: NotRequired[str | None] - base_class_map: NotRequired[dict[str, str] | None] - additional_imports: NotRequired[list[str] | None] - class_decorators: NotRequired[list[str] | None] - custom_template_dir: NotRequired[Path | None] - extra_template_data: NotRequired[defaultdict[str, dict[str, Any]] | None] - target_python_version: NotRequired[PythonVersion] - dump_resolve_reference_action: NotRequired[Callable[[Iterable[str]], str] | None] - validation: NotRequired[bool] - field_constraints: NotRequired[bool] - snake_case_field: NotRequired[bool] - strip_default_none: NotRequired[bool] - aliases: NotRequired[Mapping[str, str | list[str]] | None] - allow_population_by_field_name: NotRequired[bool] - apply_default_values_for_required_fields: NotRequired[bool] - allow_extra_fields: NotRequired[bool] - extra_fields: NotRequired[str | None] - use_generic_base_class: NotRequired[bool] - force_optional_for_required_fields: NotRequired[bool] - class_name: NotRequired[str | None] - use_standard_collections: NotRequired[bool] - base_path: NotRequired[Path | None] - use_schema_description: NotRequired[bool] - use_field_description: NotRequired[bool] - use_field_description_example: NotRequired[bool] - use_attribute_docstrings: NotRequired[bool] - use_inline_field_description: NotRequired[bool] - use_default_kwarg: NotRequired[bool] - reuse_model: NotRequired[bool] - reuse_scope: NotRequired[ReuseScope | None] - shared_module_name: NotRequired[str] - encoding: NotRequired[str] - enum_field_as_literal: NotRequired[LiteralType | None] - enum_field_as_literal_map: NotRequired[dict[str, str] | None] - ignore_enum_constraints: NotRequired[bool] - set_default_enum_member: NotRequired[bool] - use_subclass_enum: NotRequired[bool] - use_specialized_enum: NotRequired[bool] - strict_nullable: NotRequired[bool] - use_generic_container_types: NotRequired[bool] - enable_faux_immutability: NotRequired[bool] - remote_text_cache: NotRequired[DefaultPutDict[str, str] | None] - disable_appending_item_suffix: NotRequired[bool] - strict_types: NotRequired[Sequence[StrictTypes] | None] - empty_enum_field_name: NotRequired[str | None] - custom_class_name_generator: NotRequired[Callable[[str], str] | None] - field_extra_keys: NotRequired[set[str] | None] - field_include_all_keys: NotRequired[bool] - field_extra_keys_without_x_prefix: NotRequired[set[str] | None] - model_extra_keys: NotRequired[set[str] | None] - model_extra_keys_without_x_prefix: NotRequired[set[str] | None] - wrap_string_literal: NotRequired[bool | None] - use_title_as_name: NotRequired[bool] - use_operation_id_as_name: NotRequired[bool] - use_unique_items_as_set: NotRequired[bool] - use_tuple_for_fixed_items: NotRequired[bool] - allof_merge_mode: NotRequired[AllOfMergeMode] - allof_class_hierarchy: NotRequired[AllOfClassHierarchy] - http_headers: NotRequired[Sequence[tuple[str, str]] | None] - http_ignore_tls: NotRequired[bool] - http_timeout: NotRequired[float | None] - use_annotated: NotRequired[bool] - use_serialize_as_any: NotRequired[bool] - use_non_positive_negative_number_constrained_types: NotRequired[bool] - use_decimal_for_multiple_of: NotRequired[bool] - original_field_name_delimiter: NotRequired[str | None] - use_double_quotes: NotRequired[bool] - use_union_operator: NotRequired[bool] - allow_responses_without_content: NotRequired[bool] - collapse_root_models: NotRequired[bool] - collapse_root_models_name_strategy: NotRequired[CollapseRootModelsNameStrategy | None] - collapse_reuse_models: NotRequired[bool] - skip_root_model: NotRequired[bool] - use_type_alias: NotRequired[bool] - special_field_name_prefix: NotRequired[str | None] - remove_special_field_name_prefix: NotRequired[bool] - capitalise_enum_members: NotRequired[bool] - keep_model_order: NotRequired[bool] - use_one_literal_as_default: NotRequired[bool] - use_enum_values_in_discriminator: NotRequired[bool] - known_third_party: NotRequired[list[str] | None] - custom_formatters: NotRequired[list[str] | None] - custom_formatters_kwargs: NotRequired[dict[str, Any] | None] - use_pendulum: NotRequired[bool] - use_standard_primitive_types: NotRequired[bool] - http_query_parameters: NotRequired[Sequence[tuple[str, str]] | None] - treat_dot_as_module: NotRequired[bool | None] - use_exact_imports: NotRequired[bool] - default_field_extras: NotRequired[dict[str, Any] | None] - target_datetime_class: NotRequired[DatetimeClassType | None] - target_date_class: NotRequired[DateClassType | None] - keyword_only: NotRequired[bool] - frozen_dataclasses: NotRequired[bool] - no_alias: NotRequired[bool] - use_frozen_field: NotRequired[bool] - use_default_factory_for_optional_nested_models: NotRequired[bool] - formatters: NotRequired[list[Formatter]] - defer_formatting: NotRequired[bool] - parent_scoped_naming: NotRequired[bool] - naming_strategy: NotRequired[NamingStrategy | None] - duplicate_name_suffix: NotRequired[dict[str, str] | None] - dataclass_arguments: NotRequired[DataclassArguments | None] - type_mappings: NotRequired[list[str] | None] - type_overrides: NotRequired[dict[str, str] | None] - read_only_write_only_model_type: NotRequired[ReadOnlyWriteOnlyModelType | None] - field_type_collision_strategy: NotRequired[FieldTypeCollisionStrategy | None] - target_pydantic_version: NotRequired[TargetPydanticVersion | None] - - -class JSONSchemaParserConfigDict(ParserConfig): - pass diff --git a/src/datamodel_code_generator/_types/parser_config_dict.py b/src/datamodel_code_generator/_types/parser_config_dict.py deleted file mode 100644 index 82ac57fc7..000000000 --- a/src/datamodel_code_generator/_types/parser_config_dict.py +++ /dev/null @@ -1,144 +0,0 @@ -# generated by datamodel-codegen: -# filename: - -from __future__ import annotations - -from typing import TYPE_CHECKING, Any, TypedDict - -from typing_extensions import NotRequired - -if TYPE_CHECKING: - from collections import defaultdict - from collections.abc import Callable, Iterable, Mapping, Sequence - from pathlib import Path - - from datamodel_code_generator.enums import ( - AllOfClassHierarchy, - AllOfMergeMode, - CollapseRootModelsNameStrategy, - DataclassArguments, - FieldTypeCollisionStrategy, - NamingStrategy, - ReadOnlyWriteOnlyModelType, - ReuseScope, - StrictTypes, - TargetPydanticVersion, - ) - from datamodel_code_generator.format import DateClassType, DatetimeClassType, Formatter, PythonVersion - from datamodel_code_generator.model.base import DataModel, DataModelFieldBase - from datamodel_code_generator.parser import DefaultPutDict, LiteralType - from datamodel_code_generator.types import DataTypeManager - - -class ParserConfigDict(TypedDict): - data_model_type: NotRequired[type[DataModel]] - data_model_root_type: NotRequired[type[DataModel]] - data_type_manager_type: NotRequired[type[DataTypeManager]] - data_model_field_type: NotRequired[type[DataModelFieldBase]] - base_class: NotRequired[str | None] - base_class_map: NotRequired[dict[str, str] | None] - additional_imports: NotRequired[list[str] | None] - class_decorators: NotRequired[list[str] | None] - custom_template_dir: NotRequired[Path | None] - extra_template_data: NotRequired[defaultdict[str, dict[str, Any]] | None] - target_python_version: NotRequired[PythonVersion] - dump_resolve_reference_action: NotRequired[Callable[[Iterable[str]], str] | None] - validation: NotRequired[bool] - field_constraints: NotRequired[bool] - snake_case_field: NotRequired[bool] - strip_default_none: NotRequired[bool] - aliases: NotRequired[Mapping[str, str | list[str]] | None] - allow_population_by_field_name: NotRequired[bool] - apply_default_values_for_required_fields: NotRequired[bool] - allow_extra_fields: NotRequired[bool] - extra_fields: NotRequired[str | None] - use_generic_base_class: NotRequired[bool] - force_optional_for_required_fields: NotRequired[bool] - class_name: NotRequired[str | None] - use_standard_collections: NotRequired[bool] - base_path: NotRequired[Path | None] - use_schema_description: NotRequired[bool] - use_field_description: NotRequired[bool] - use_field_description_example: NotRequired[bool] - use_attribute_docstrings: NotRequired[bool] - use_inline_field_description: NotRequired[bool] - use_default_kwarg: NotRequired[bool] - reuse_model: NotRequired[bool] - reuse_scope: NotRequired[ReuseScope | None] - shared_module_name: NotRequired[str] - encoding: NotRequired[str] - enum_field_as_literal: NotRequired[LiteralType | None] - enum_field_as_literal_map: NotRequired[dict[str, str] | None] - ignore_enum_constraints: NotRequired[bool] - set_default_enum_member: NotRequired[bool] - use_subclass_enum: NotRequired[bool] - use_specialized_enum: NotRequired[bool] - strict_nullable: NotRequired[bool] - use_generic_container_types: NotRequired[bool] - enable_faux_immutability: NotRequired[bool] - remote_text_cache: NotRequired[DefaultPutDict[str, str] | None] - disable_appending_item_suffix: NotRequired[bool] - strict_types: NotRequired[Sequence[StrictTypes] | None] - empty_enum_field_name: NotRequired[str | None] - custom_class_name_generator: NotRequired[Callable[[str], str] | None] - field_extra_keys: NotRequired[set[str] | None] - field_include_all_keys: NotRequired[bool] - field_extra_keys_without_x_prefix: NotRequired[set[str] | None] - model_extra_keys: NotRequired[set[str] | None] - model_extra_keys_without_x_prefix: NotRequired[set[str] | None] - wrap_string_literal: NotRequired[bool | None] - use_title_as_name: NotRequired[bool] - use_operation_id_as_name: NotRequired[bool] - use_unique_items_as_set: NotRequired[bool] - use_tuple_for_fixed_items: NotRequired[bool] - allof_merge_mode: NotRequired[AllOfMergeMode] - allof_class_hierarchy: NotRequired[AllOfClassHierarchy] - http_headers: NotRequired[Sequence[tuple[str, str]] | None] - http_ignore_tls: NotRequired[bool] - http_timeout: NotRequired[float | None] - use_annotated: NotRequired[bool] - use_serialize_as_any: NotRequired[bool] - use_non_positive_negative_number_constrained_types: NotRequired[bool] - use_decimal_for_multiple_of: NotRequired[bool] - original_field_name_delimiter: NotRequired[str | None] - use_double_quotes: NotRequired[bool] - use_union_operator: NotRequired[bool] - allow_responses_without_content: NotRequired[bool] - collapse_root_models: NotRequired[bool] - collapse_root_models_name_strategy: NotRequired[CollapseRootModelsNameStrategy | None] - collapse_reuse_models: NotRequired[bool] - skip_root_model: NotRequired[bool] - use_type_alias: NotRequired[bool] - special_field_name_prefix: NotRequired[str | None] - remove_special_field_name_prefix: NotRequired[bool] - capitalise_enum_members: NotRequired[bool] - keep_model_order: NotRequired[bool] - use_one_literal_as_default: NotRequired[bool] - use_enum_values_in_discriminator: NotRequired[bool] - known_third_party: NotRequired[list[str] | None] - custom_formatters: NotRequired[list[str] | None] - custom_formatters_kwargs: NotRequired[dict[str, Any] | None] - use_pendulum: NotRequired[bool] - use_standard_primitive_types: NotRequired[bool] - http_query_parameters: NotRequired[Sequence[tuple[str, str]] | None] - treat_dot_as_module: NotRequired[bool | None] - use_exact_imports: NotRequired[bool] - default_field_extras: NotRequired[dict[str, Any] | None] - target_datetime_class: NotRequired[DatetimeClassType | None] - target_date_class: NotRequired[DateClassType | None] - keyword_only: NotRequired[bool] - frozen_dataclasses: NotRequired[bool] - no_alias: NotRequired[bool] - use_frozen_field: NotRequired[bool] - use_default_factory_for_optional_nested_models: NotRequired[bool] - formatters: NotRequired[list[Formatter]] - defer_formatting: NotRequired[bool] - parent_scoped_naming: NotRequired[bool] - naming_strategy: NotRequired[NamingStrategy | None] - duplicate_name_suffix: NotRequired[dict[str, str] | None] - dataclass_arguments: NotRequired[DataclassArguments | None] - type_mappings: NotRequired[list[str] | None] - type_overrides: NotRequired[dict[str, str] | None] - read_only_write_only_model_type: NotRequired[ReadOnlyWriteOnlyModelType | None] - field_type_collision_strategy: NotRequired[FieldTypeCollisionStrategy | None] - target_pydantic_version: NotRequired[TargetPydanticVersion | None] diff --git a/src/datamodel_code_generator/_types/openapi_parser_config_dict.py b/src/datamodel_code_generator/_types/parser_config_dicts.py similarity index 94% rename from src/datamodel_code_generator/_types/openapi_parser_config_dict.py rename to src/datamodel_code_generator/_types/parser_config_dicts.py index b804323ae..3db5f2d5e 100644 --- a/src/datamodel_code_generator/_types/openapi_parser_config_dict.py +++ b/src/datamodel_code_generator/_types/parser_config_dicts.py @@ -3,7 +3,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, TypedDict +from typing import TYPE_CHECKING, Any, TypeAlias, TypedDict from typing_extensions import NotRequired @@ -145,11 +145,19 @@ class ParserConfig(TypedDict): target_pydantic_version: NotRequired[TargetPydanticVersion | None] +class GraphQLParserConfig(ParserConfig): + data_model_scalar_type: NotRequired[type[DataModel]] + data_model_union_type: NotRequired[type[DataModel]] + + class JSONSchemaParserConfig(ParserConfig): pass -class OpenAPIParserConfigDict(JSONSchemaParserConfig): +class OpenAPIParserConfig(JSONSchemaParserConfig): openapi_scopes: NotRequired[list[OpenAPIScope] | None] include_path_parameters: NotRequired[bool] use_status_code_in_response_name: NotRequired[bool] + + +Model: TypeAlias = ParserConfig | GraphQLParserConfig | JSONSchemaParserConfig | OpenAPIParserConfig diff --git a/tox.ini b/tox.ini index 0e9355a94..24286739e 100644 --- a/tox.ini +++ b/tox.ini @@ -116,10 +116,7 @@ dependency_groups = pkg-meta description = Generate TypedDict files from config models (use --check to validate only) commands = datamodel-codegen --profile generate-config-dict {posargs} - datamodel-codegen --profile parser-config-dict {posargs} - datamodel-codegen --profile graphql-parser-config-dict {posargs} - datamodel-codegen --profile jsonschema-parser-config-dict {posargs} - datamodel-codegen --profile openapi-parser-config-dict {posargs} + datamodel-codegen --profile parser-config-dicts {posargs} datamodel-codegen --profile parse-config-dict {posargs} dependency_groups = dev no_default_groups = true