From 5b26a143f4be259bb52debe9c0c88df8c5c820f2 Mon Sep 17 00:00:00 2001 From: Isaac To Date: Tue, 26 Nov 2024 22:11:57 -0800 Subject: [PATCH 1/3] fix: access `literal_values` func based on Pydantic version This is put in to support different version of Pydantic --- src/pydantic2linkml/gen_linkml.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/pydantic2linkml/gen_linkml.py b/src/pydantic2linkml/gen_linkml.py index 16b5d255..e3d1bba6 100644 --- a/src/pydantic2linkml/gen_linkml.py +++ b/src/pydantic2linkml/gen_linkml.py @@ -54,6 +54,13 @@ sort_dict, ) +pydantic_version = version.parse(pydantic.__version__) + +if pydantic_version >= version.parse("2.10"): + literal_values = _typing_extra.literal_values +else: + literal_values = _typing_extra.all_literal_values + logger = logging.getLogger(__name__) # Callable to sort a dictionary by its keys case-insensitively @@ -406,9 +413,7 @@ def _build_schema_type_to_method( for one of the schema or field types """ mapping: dict[CoreSchemaOrFieldType, Callable[[CoreSchemaOrField], None]] = {} - core_schema_types: list[ - CoreSchemaOrFieldType - ] = _typing_extra.all_literal_values( + core_schema_types: list[CoreSchemaOrFieldType] = literal_values( CoreSchemaOrFieldType # type: ignore ) for key in core_schema_types: @@ -1307,7 +1312,7 @@ def _typed_dict_field_schema(self, schema: core_schema.TypedDictField) -> None: def _computed_field_schema(self, schema: core_schema.ComputedField) -> None: raise TranslationNotImplementedError(schema) - if version.parse(pydantic.__version__) >= version.parse("2.9"): + if pydantic_version >= version.parse("2.9"): # Methods define when Pydantic version is 2.9 or later def _complex_schema(self, schema: core_schema.ComplexSchema) -> None: raise TranslationNotImplementedError(schema) From 91cc54d6c699f861d605b43e157e03a705a54cb7 Mon Sep 17 00:00:00 2001 From: Isaac To Date: Tue, 7 Jan 2025 09:58:11 -0800 Subject: [PATCH 2/3] revert: remove the upper restriction on Pydantic version This removes the temporary version restriction on Pydantic put in by PR #11 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5898827d..381ef9b4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,7 +28,7 @@ classifiers = [ ] dependencies = [ "linkml @ git+https://github.com/candleindark/linkml.git@bundle-error", - "pydantic>=2.7,<2.10", + "pydantic~=2.7", "typer", ] From 2a8ac33a387bed97f156c5acc7b451f3a121634d Mon Sep 17 00:00:00 2001 From: Isaac To Date: Tue, 7 Jan 2025 14:00:16 -0800 Subject: [PATCH 3/3] feat: define `SlotGenerator._invalid_schema()` Conditionally on Pydantic>=2.10 for support of the newly added `core_schema.InvalidSchema` in Pydantic 2.10 --- src/pydantic2linkml/gen_linkml.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/pydantic2linkml/gen_linkml.py b/src/pydantic2linkml/gen_linkml.py index e3d1bba6..3eeaa686 100644 --- a/src/pydantic2linkml/gen_linkml.py +++ b/src/pydantic2linkml/gen_linkml.py @@ -470,6 +470,11 @@ def _attach_note(self, note: str) -> None: """ self._slot.notes.append(f"{__package__}: {note}") + if pydantic_version >= version.parse("2.10"): + + def _invalid_schema(self, schema: core_schema.InvalidSchema) -> None: + raise TranslationNotImplementedError(schema) + def _any_schema(self, _schema: core_schema.AnySchema) -> None: """ Shape the contained slot definition to match any value