|
61 | 61 | if TYPE_CHECKING: |
62 | 62 | from collections import defaultdict |
63 | 63 |
|
| 64 | + from datamodel_code_generator.config import GenerateConfig |
64 | 65 | from datamodel_code_generator.model.pydantic_v2 import UnionMode |
65 | 66 | from datamodel_code_generator.parser.base import Parser |
66 | 67 | from datamodel_code_generator.types import StrictTypes |
@@ -451,6 +452,7 @@ def _build_module_content( |
451 | 452 | def generate( # noqa: PLR0912, PLR0913, PLR0914, PLR0915 |
452 | 453 | input_: Path | str | ParseResult | Mapping[str, Any], |
453 | 454 | *, |
| 455 | + config: GenerateConfig | None = None, |
454 | 456 | input_filename: str | None = None, |
455 | 457 | input_file_type: InputFileType = InputFileType.Auto, |
456 | 458 | output: Path | None = None, |
@@ -512,7 +514,7 @@ def generate( # noqa: PLR0912, PLR0913, PLR0914, PLR0915 |
512 | 514 | model_extra_keys_without_x_prefix: set[str] | None = None, |
513 | 515 | openapi_scopes: list[OpenAPIScope] | None = None, |
514 | 516 | include_path_parameters: bool = False, |
515 | | - graphql_scopes: list[GraphQLScope] | None = None, # noqa: ARG001 |
| 517 | + graphql_scopes: list[GraphQLScope] | None = None, |
516 | 518 | wrap_string_literal: bool | None = None, |
517 | 519 | use_title_as_name: bool = False, |
518 | 520 | use_operation_id_as_name: bool = False, |
@@ -583,6 +585,190 @@ def generate( # noqa: PLR0912, PLR0913, PLR0914, PLR0915 |
583 | 585 | - When output is None and multiple modules: GeneratedModules (dict mapping |
584 | 586 | module path tuples to generated code strings) |
585 | 587 | """ |
| 588 | + if config is not None: |
| 589 | + input_filename = config.input_filename if input_filename is None else input_filename |
| 590 | + input_file_type = config.input_file_type if input_file_type == InputFileType.Auto else input_file_type |
| 591 | + output = config.output if output is None else output |
| 592 | + output_model_type = ( |
| 593 | + config.output_model_type if output_model_type == DataModelType.PydanticBaseModel else output_model_type |
| 594 | + ) |
| 595 | + target_python_version = ( |
| 596 | + config.target_python_version if target_python_version == PythonVersionMin else target_python_version |
| 597 | + ) |
| 598 | + target_pydantic_version = ( |
| 599 | + config.target_pydantic_version if target_pydantic_version is None else target_pydantic_version |
| 600 | + ) |
| 601 | + base_class = base_class or config.base_class |
| 602 | + base_class_map = config.base_class_map if base_class_map is None else base_class_map |
| 603 | + additional_imports = config.additional_imports if additional_imports is None else additional_imports |
| 604 | + class_decorators = config.class_decorators if class_decorators is None else class_decorators |
| 605 | + custom_template_dir = config.custom_template_dir if custom_template_dir is None else custom_template_dir |
| 606 | + if extra_template_data is None and config.extra_template_data is not None: |
| 607 | + from collections import defaultdict as _defaultdict # noqa: PLC0415 |
| 608 | + |
| 609 | + extra_template_data = _defaultdict(dict, config.extra_template_data) |
| 610 | + validation = validation or config.validation |
| 611 | + field_constraints = field_constraints or config.field_constraints |
| 612 | + snake_case_field = snake_case_field or config.snake_case_field |
| 613 | + strip_default_none = strip_default_none or config.strip_default_none |
| 614 | + aliases = config.aliases if aliases is None else aliases |
| 615 | + disable_timestamp = disable_timestamp or config.disable_timestamp |
| 616 | + enable_version_header = enable_version_header or config.enable_version_header |
| 617 | + enable_command_header = enable_command_header or config.enable_command_header |
| 618 | + command_line = config.command_line if command_line is None else command_line |
| 619 | + allow_population_by_field_name = allow_population_by_field_name or config.allow_population_by_field_name |
| 620 | + allow_extra_fields = allow_extra_fields or config.allow_extra_fields |
| 621 | + extra_fields = config.extra_fields if extra_fields is None else extra_fields |
| 622 | + use_generic_base_class = use_generic_base_class or config.use_generic_base_class |
| 623 | + apply_default_values_for_required_fields = ( |
| 624 | + apply_default_values_for_required_fields or config.apply_default_values_for_required_fields |
| 625 | + ) |
| 626 | + force_optional_for_required_fields = ( |
| 627 | + force_optional_for_required_fields or config.force_optional_for_required_fields |
| 628 | + ) |
| 629 | + class_name = config.class_name if class_name is None else class_name |
| 630 | + use_standard_collections = ( |
| 631 | + config.use_standard_collections if use_standard_collections else use_standard_collections |
| 632 | + ) |
| 633 | + use_schema_description = use_schema_description or config.use_schema_description |
| 634 | + use_field_description = use_field_description or config.use_field_description |
| 635 | + use_field_description_example = use_field_description_example or config.use_field_description_example |
| 636 | + use_attribute_docstrings = use_attribute_docstrings or config.use_attribute_docstrings |
| 637 | + use_inline_field_description = use_inline_field_description or config.use_inline_field_description |
| 638 | + use_default_kwarg = use_default_kwarg or config.use_default_kwarg |
| 639 | + reuse_model = reuse_model or config.reuse_model |
| 640 | + reuse_scope = config.reuse_scope if reuse_scope == ReuseScope.Module else reuse_scope |
| 641 | + shared_module_name = ( |
| 642 | + config.shared_module_name if shared_module_name == DEFAULT_SHARED_MODULE_NAME else shared_module_name |
| 643 | + ) |
| 644 | + encoding = config.encoding if encoding == "utf-8" else encoding |
| 645 | + enum_field_as_literal = config.enum_field_as_literal if enum_field_as_literal is None else enum_field_as_literal |
| 646 | + enum_field_as_literal_map = ( |
| 647 | + config.enum_field_as_literal_map if enum_field_as_literal_map is None else enum_field_as_literal_map |
| 648 | + ) |
| 649 | + ignore_enum_constraints = ignore_enum_constraints or config.ignore_enum_constraints |
| 650 | + use_one_literal_as_default = use_one_literal_as_default or config.use_one_literal_as_default |
| 651 | + use_enum_values_in_discriminator = use_enum_values_in_discriminator or config.use_enum_values_in_discriminator |
| 652 | + set_default_enum_member = set_default_enum_member or config.set_default_enum_member |
| 653 | + use_subclass_enum = use_subclass_enum or config.use_subclass_enum |
| 654 | + use_specialized_enum = config.use_specialized_enum if use_specialized_enum else False |
| 655 | + strict_nullable = strict_nullable or config.strict_nullable |
| 656 | + use_generic_container_types = use_generic_container_types or config.use_generic_container_types |
| 657 | + enable_faux_immutability = enable_faux_immutability or config.enable_faux_immutability |
| 658 | + disable_appending_item_suffix = disable_appending_item_suffix or config.disable_appending_item_suffix |
| 659 | + strict_types = config.strict_types if strict_types is None else strict_types |
| 660 | + empty_enum_field_name = config.empty_enum_field_name if empty_enum_field_name is None else empty_enum_field_name |
| 661 | + custom_class_name_generator = ( |
| 662 | + config.custom_class_name_generator if custom_class_name_generator is None else custom_class_name_generator |
| 663 | + ) |
| 664 | + field_extra_keys = config.field_extra_keys if field_extra_keys is None else field_extra_keys |
| 665 | + field_include_all_keys = field_include_all_keys or config.field_include_all_keys |
| 666 | + field_extra_keys_without_x_prefix = ( |
| 667 | + config.field_extra_keys_without_x_prefix |
| 668 | + if field_extra_keys_without_x_prefix is None |
| 669 | + else field_extra_keys_without_x_prefix |
| 670 | + ) |
| 671 | + model_extra_keys = config.model_extra_keys if model_extra_keys is None else model_extra_keys |
| 672 | + model_extra_keys_without_x_prefix = ( |
| 673 | + config.model_extra_keys_without_x_prefix |
| 674 | + if model_extra_keys_without_x_prefix is None |
| 675 | + else model_extra_keys_without_x_prefix |
| 676 | + ) |
| 677 | + openapi_scopes = config.openapi_scopes if openapi_scopes is None else openapi_scopes |
| 678 | + include_path_parameters = include_path_parameters or config.include_path_parameters |
| 679 | + graphql_scopes = config.graphql_scopes if graphql_scopes is None else graphql_scopes |
| 680 | + wrap_string_literal = config.wrap_string_literal if wrap_string_literal is None else wrap_string_literal |
| 681 | + use_title_as_name = use_title_as_name or config.use_title_as_name |
| 682 | + use_operation_id_as_name = use_operation_id_as_name or config.use_operation_id_as_name |
| 683 | + use_unique_items_as_set = use_unique_items_as_set or config.use_unique_items_as_set |
| 684 | + use_tuple_for_fixed_items = use_tuple_for_fixed_items or config.use_tuple_for_fixed_items |
| 685 | + allof_merge_mode = ( |
| 686 | + config.allof_merge_mode if allof_merge_mode == AllOfMergeMode.Constraints else allof_merge_mode |
| 687 | + ) |
| 688 | + http_headers = config.http_headers if http_headers is None else http_headers |
| 689 | + http_ignore_tls = http_ignore_tls or config.http_ignore_tls |
| 690 | + http_timeout = config.http_timeout if http_timeout is None else http_timeout |
| 691 | + use_annotated = use_annotated or config.use_annotated |
| 692 | + use_serialize_as_any = use_serialize_as_any or config.use_serialize_as_any |
| 693 | + use_non_positive_negative_number_constrained_types = ( |
| 694 | + use_non_positive_negative_number_constrained_types |
| 695 | + or config.use_non_positive_negative_number_constrained_types |
| 696 | + ) |
| 697 | + use_decimal_for_multiple_of = use_decimal_for_multiple_of or config.use_decimal_for_multiple_of |
| 698 | + original_field_name_delimiter = ( |
| 699 | + config.original_field_name_delimiter |
| 700 | + if original_field_name_delimiter is None |
| 701 | + else original_field_name_delimiter |
| 702 | + ) |
| 703 | + use_double_quotes = use_double_quotes or config.use_double_quotes |
| 704 | + use_union_operator = config.use_union_operator if use_union_operator else False |
| 705 | + collapse_root_models = collapse_root_models or config.collapse_root_models |
| 706 | + collapse_root_models_name_strategy = ( |
| 707 | + config.collapse_root_models_name_strategy |
| 708 | + if collapse_root_models_name_strategy is None |
| 709 | + else collapse_root_models_name_strategy |
| 710 | + ) |
| 711 | + collapse_reuse_models = collapse_reuse_models or config.collapse_reuse_models |
| 712 | + skip_root_model = skip_root_model or config.skip_root_model |
| 713 | + use_type_alias = use_type_alias or config.use_type_alias |
| 714 | + use_root_model_type_alias = use_root_model_type_alias or config.use_root_model_type_alias |
| 715 | + special_field_name_prefix = ( |
| 716 | + config.special_field_name_prefix if special_field_name_prefix is None else special_field_name_prefix |
| 717 | + ) |
| 718 | + remove_special_field_name_prefix = remove_special_field_name_prefix or config.remove_special_field_name_prefix |
| 719 | + capitalise_enum_members = capitalise_enum_members or config.capitalise_enum_members |
| 720 | + keep_model_order = keep_model_order or config.keep_model_order |
| 721 | + custom_file_header = config.custom_file_header if custom_file_header is None else custom_file_header |
| 722 | + custom_file_header_path = ( |
| 723 | + config.custom_file_header_path if custom_file_header_path is None else custom_file_header_path |
| 724 | + ) |
| 725 | + custom_formatters = config.custom_formatters if custom_formatters is None else custom_formatters |
| 726 | + custom_formatters_kwargs = ( |
| 727 | + config.custom_formatters_kwargs if custom_formatters_kwargs is None else custom_formatters_kwargs |
| 728 | + ) |
| 729 | + use_pendulum = use_pendulum or config.use_pendulum |
| 730 | + use_standard_primitive_types = use_standard_primitive_types or config.use_standard_primitive_types |
| 731 | + http_query_parameters = config.http_query_parameters if http_query_parameters is None else http_query_parameters |
| 732 | + treat_dot_as_module = config.treat_dot_as_module if treat_dot_as_module is None else treat_dot_as_module |
| 733 | + use_exact_imports = use_exact_imports or config.use_exact_imports |
| 734 | + union_mode = config.union_mode if union_mode is None else union_mode |
| 735 | + output_datetime_class = config.output_datetime_class if output_datetime_class is None else output_datetime_class |
| 736 | + output_date_class = config.output_date_class if output_date_class is None else output_date_class |
| 737 | + keyword_only = keyword_only or config.keyword_only |
| 738 | + frozen_dataclasses = frozen_dataclasses or config.frozen_dataclasses |
| 739 | + no_alias = no_alias or config.no_alias |
| 740 | + use_frozen_field = use_frozen_field or config.use_frozen_field |
| 741 | + use_default_factory_for_optional_nested_models = ( |
| 742 | + use_default_factory_for_optional_nested_models or config.use_default_factory_for_optional_nested_models |
| 743 | + ) |
| 744 | + formatters = config.formatters if formatters == DEFAULT_FORMATTERS else formatters |
| 745 | + settings_path = config.settings_path if settings_path is None else settings_path |
| 746 | + parent_scoped_naming = parent_scoped_naming or config.parent_scoped_naming |
| 747 | + naming_strategy = config.naming_strategy if naming_strategy is None else naming_strategy |
| 748 | + duplicate_name_suffix = config.duplicate_name_suffix if duplicate_name_suffix is None else duplicate_name_suffix |
| 749 | + dataclass_arguments = config.dataclass_arguments if dataclass_arguments is None else dataclass_arguments |
| 750 | + disable_future_imports = disable_future_imports or config.disable_future_imports |
| 751 | + type_mappings = config.type_mappings if type_mappings is None else type_mappings |
| 752 | + type_overrides = config.type_overrides if type_overrides is None else type_overrides |
| 753 | + read_only_write_only_model_type = ( |
| 754 | + config.read_only_write_only_model_type |
| 755 | + if read_only_write_only_model_type is None |
| 756 | + else read_only_write_only_model_type |
| 757 | + ) |
| 758 | + use_status_code_in_response_name = use_status_code_in_response_name or config.use_status_code_in_response_name |
| 759 | + all_exports_scope = config.all_exports_scope if all_exports_scope is None else all_exports_scope |
| 760 | + all_exports_collision_strategy = ( |
| 761 | + config.all_exports_collision_strategy |
| 762 | + if all_exports_collision_strategy is None |
| 763 | + else all_exports_collision_strategy |
| 764 | + ) |
| 765 | + field_type_collision_strategy = ( |
| 766 | + config.field_type_collision_strategy |
| 767 | + if field_type_collision_strategy is None |
| 768 | + else field_type_collision_strategy |
| 769 | + ) |
| 770 | + module_split_mode = config.module_split_mode if module_split_mode is None else module_split_mode |
| 771 | + |
586 | 772 | remote_text_cache: DefaultPutDict[str, str] = DefaultPutDict() |
587 | 773 | match input_: |
588 | 774 | case str(): |
|
0 commit comments