Skip to content

Commit 7e47a7e

Browse files
committed
Integrate format registry with parsers (backward compatible)
1 parent 619e50c commit 7e47a7e

1 file changed

Lines changed: 26 additions & 10 deletions

File tree

src/datamodel_code_generator/parser/jsonschema.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -509,15 +509,21 @@ def get_ref_type(ref: str) -> JSONReference:
509509
return JSONReference.REMOTE
510510

511511

512-
def _get_type(type_: str, format__: str | None = None) -> Types:
512+
def _get_type(
513+
type_: str,
514+
format__: str | None = None,
515+
data_formats: dict[str, dict[str, Types]] | None = None,
516+
) -> Types:
513517
"""Get the appropriate Types enum for a given JSON Schema type and format."""
514-
if type_ not in json_schema_data_formats:
518+
if data_formats is None:
519+
data_formats = json_schema_data_formats
520+
if type_ not in data_formats:
515521
return Types.any
516-
if (data_formats := json_schema_data_formats[type_].get("default" if format__ is None else format__)) is not None:
517-
return data_formats
522+
if (type_format := data_formats[type_].get("default" if format__ is None else format__)) is not None:
523+
return type_format
518524

519525
warn(f"format of {format__!r} not understood for {type_!r} - using default", stacklevel=2)
520-
return json_schema_data_formats[type_]["default"]
526+
return data_formats[type_]["default"]
521527

522528

523529
JsonSchemaObject.model_rebuild()
@@ -732,21 +738,31 @@ def get_field_extras(self, obj: JsonSchemaObject) -> dict[str, Any]:
732738
extras.update(self.default_field_extras)
733739
return extras
734740

741+
@cached_property
742+
def _data_formats(self) -> dict[str, dict[str, Types]]:
743+
"""Get data format mappings for this parser type.
744+
745+
Returns all formats for backward compatibility.
746+
OpenAPI-specific formats will be separated in Strict mode (future).
747+
"""
748+
return json_schema_data_formats
749+
735750
def _get_type_with_mappings(self, type_: str, format_: str | None = None) -> Types:
736751
"""Get the Types enum for a given type and format, applying custom type mappings.
737752
738753
Custom mappings from --type-mappings are checked first, then falls back to
739-
the default json_schema_data_formats mappings.
754+
the parser's data format mappings.
740755
"""
756+
data_formats = self._data_formats
741757
if self.type_mappings and format_ is not None and (type_, format_) in self.type_mappings:
742758
target_format = self.type_mappings[type_, format_]
743-
for type_formats in json_schema_data_formats.values():
759+
for type_formats in data_formats.values():
744760
if target_format in type_formats:
745761
return type_formats[target_format]
746-
if target_format in json_schema_data_formats:
747-
return json_schema_data_formats[target_format]["default"]
762+
if target_format in data_formats:
763+
return data_formats[target_format]["default"]
748764

749-
return _get_type(type_, format_)
765+
return _get_type(type_, format_, data_formats)
750766

751767
@cached_property
752768
def schema_paths(self) -> list[tuple[str, list[str]]]:

0 commit comments

Comments
 (0)