diff --git a/libs/core/langchain_core/pydantic_v1/__init__.py b/libs/core/langchain_core/pydantic_v1/__init__.py index 6dfc11dc755..a00f50f7acc 100644 --- a/libs/core/langchain_core/pydantic_v1/__init__.py +++ b/libs/core/langchain_core/pydantic_v1/__init__.py @@ -1,43 +1,14 @@ -from importlib import metadata - -from langchain_core._api.deprecation import warn_deprecated - -## Create namespaces for pydantic v1 and v2. -# This code must stay at the top of the file before other modules may -# attempt to import pydantic since it adds pydantic_v1 and pydantic_v2 to sys.modules. -# -# This hack is done for the following reasons: -# * Langchain will attempt to remain compatible with both pydantic v1 and v2 since -# both dependencies and dependents may be stuck on either version of v1 or v2. -# * Creating namespaces for pydantic v1 and v2 should allow us to write code that -# unambiguously uses either v1 or v2 API. -# * This change is easier to roll out and roll back. - -try: - from pydantic.v1 import * # noqa: F403 -except ImportError: - from pydantic import * # type: ignore # noqa: F403 - - -try: - _PYDANTIC_MAJOR_VERSION: int = int(metadata.version("pydantic").split(".")[0]) -except metadata.PackageNotFoundError: - _PYDANTIC_MAJOR_VERSION = 0 - -warn_deprecated( - "0.3.0", - removal="1.0.0", - alternative="pydantic.v1 or pydantic", - message=( - "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. " - "The langchain_core.pydantic_v1 module was a " - "compatibility shim for pydantic v1, and should no longer be used. " - "Please update the code to import from Pydantic directly.\n\n" +def _raise_import_error() -> None: + """Raise ImportError with a helpful message.""" + raise ImportError( + "Please do not import from langchain_core.pydantic_v1.*." + "This module was a compatibility shim for pydantic v1, and should " + "no longer be used " + "Please update the code to import from Pydantic directly. " "For example, replace imports like: " "`from langchain_core.pydantic_v1 import BaseModel`\n" "with: `from pydantic import BaseModel`\n" - "or the v1 compatibility namespace if you are working in a code base " - "that has not been fully upgraded to pydantic 2 yet. " - "\tfrom pydantic.v1 import BaseModel\n" - ), -) + ) + + +_raise_import_error() diff --git a/libs/core/langchain_core/pydantic_v1/dataclasses.py b/libs/core/langchain_core/pydantic_v1/dataclasses.py index 824da7d6b34..a00f50f7acc 100644 --- a/libs/core/langchain_core/pydantic_v1/dataclasses.py +++ b/libs/core/langchain_core/pydantic_v1/dataclasses.py @@ -1,24 +1,14 @@ -from langchain_core._api import warn_deprecated - -try: - from pydantic.v1.dataclasses import * # noqa: F403 -except ImportError: - from pydantic.dataclasses import * # type: ignore # noqa: F403 - -warn_deprecated( - "0.3.0", - removal="1.0.0", - alternative="pydantic.v1 or pydantic", - message=( - "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. " - "The langchain_core.pydantic_v1 module was a " - "compatibility shim for pydantic v1, and should no longer be used. " - "Please update the code to import from Pydantic directly.\n\n" +def _raise_import_error() -> None: + """Raise ImportError with a helpful message.""" + raise ImportError( + "Please do not import from langchain_core.pydantic_v1.*." + "This module was a compatibility shim for pydantic v1, and should " + "no longer be used " + "Please update the code to import from Pydantic directly. " "For example, replace imports like: " "`from langchain_core.pydantic_v1 import BaseModel`\n" "with: `from pydantic import BaseModel`\n" - "or the v1 compatibility namespace if you are working in a code base " - "that has not been fully upgraded to pydantic 2 yet. " - "\tfrom pydantic.v1 import BaseModel\n" - ), -) + ) + + +_raise_import_error() diff --git a/libs/core/langchain_core/pydantic_v1/main.py b/libs/core/langchain_core/pydantic_v1/main.py index 3449832620e..a00f50f7acc 100644 --- a/libs/core/langchain_core/pydantic_v1/main.py +++ b/libs/core/langchain_core/pydantic_v1/main.py @@ -1,24 +1,14 @@ -from langchain_core._api import warn_deprecated - -try: - from pydantic.v1.main import * # noqa: F403 -except ImportError: - from pydantic.main import * # type: ignore # noqa: F403 - -warn_deprecated( - "0.3.0", - removal="1.0.0", - alternative="pydantic.v1 or pydantic", - message=( - "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. " - "The langchain_core.pydantic_v1 module was a " - "compatibility shim for pydantic v1, and should no longer be used. " - "Please update the code to import from Pydantic directly.\n\n" +def _raise_import_error() -> None: + """Raise ImportError with a helpful message.""" + raise ImportError( + "Please do not import from langchain_core.pydantic_v1.*." + "This module was a compatibility shim for pydantic v1, and should " + "no longer be used " + "Please update the code to import from Pydantic directly. " "For example, replace imports like: " "`from langchain_core.pydantic_v1 import BaseModel`\n" "with: `from pydantic import BaseModel`\n" - "or the v1 compatibility namespace if you are working in a code base " - "that has not been fully upgraded to pydantic 2 yet. " - "\tfrom pydantic.v1 import BaseModel\n" - ), -) + ) + + +_raise_import_error() diff --git a/libs/langchain/langchain/pydantic_v1/__init__.py b/libs/langchain/langchain/pydantic_v1/__init__.py index c329193ffd3..6fc19904561 100644 --- a/libs/langchain/langchain/pydantic_v1/__init__.py +++ b/libs/langchain/langchain/pydantic_v1/__init__.py @@ -1,43 +1,14 @@ -from importlib import metadata - -from langchain_core._api import warn_deprecated - -## Create namespaces for pydantic v1 and v2. -# This code must stay at the top of the file before other modules may -# attempt to import pydantic since it adds pydantic_v1 and pydantic_v2 to sys.modules. -# -# This hack is done for the following reasons: -# * Langchain will attempt to remain compatible with both pydantic v1 and v2 since -# both dependencies and dependents may be stuck on either version of v1 or v2. -# * Creating namespaces for pydantic v1 and v2 should allow us to write code that -# unambiguously uses either v1 or v2 API. -# * This change is easier to roll out and roll back. - -try: - from pydantic.v1 import * # noqa: F403 -except ImportError: - from pydantic import * # type: ignore # noqa: F403 - - -try: - _PYDANTIC_MAJOR_VERSION: int = int(metadata.version("pydantic").split(".")[0]) -except metadata.PackageNotFoundError: - _PYDANTIC_MAJOR_VERSION = 0 - -warn_deprecated( - "0.3.0", - removal="1.0.0", - alternative="pydantic.v1 or pydantic", - message=( - "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. " - "The langchain.pydantic_v1 module was a " - "compatibility shim for pydantic v1, and should no longer be used. " - "Please update the code to import from Pydantic directly.\n\n" +def _raise_import_error() -> None: + """Raise ImportError with a helpful message.""" + raise ImportError( + "Please do not import from langchain.pydantic_v1.*." + "This module was a compatibility shim for pydantic v1, and should " + "no longer be used " + "Please update the code to import from Pydantic directly. " "For example, replace imports like: " "`from langchain.pydantic_v1 import BaseModel`\n" "with: `from pydantic import BaseModel`\n" - "or the v1 compatibility namespace if you are working in a code base " - "that has not been fully upgraded to pydantic 2 yet. " - "\tfrom pydantic.v1 import BaseModel\n" - ), -) + ) + + +_raise_import_error() diff --git a/libs/langchain/langchain/pydantic_v1/dataclasses.py b/libs/langchain/langchain/pydantic_v1/dataclasses.py index b057c5bb6cc..6fc19904561 100644 --- a/libs/langchain/langchain/pydantic_v1/dataclasses.py +++ b/libs/langchain/langchain/pydantic_v1/dataclasses.py @@ -1,24 +1,14 @@ -from langchain_core._api import warn_deprecated - -try: - from pydantic.v1.dataclasses import * # noqa: F403 -except ImportError: - from pydantic.dataclasses import * # type: ignore # noqa: F403 - -warn_deprecated( - "0.3.0", - removal="1.0.0", - alternative="pydantic.v1 or pydantic", - message=( - "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. " - "The langchain.pydantic_v1 module was a " - "compatibility shim for pydantic v1, and should no longer be used. " - "Please update the code to import from Pydantic directly.\n\n" +def _raise_import_error() -> None: + """Raise ImportError with a helpful message.""" + raise ImportError( + "Please do not import from langchain.pydantic_v1.*." + "This module was a compatibility shim for pydantic v1, and should " + "no longer be used " + "Please update the code to import from Pydantic directly. " "For example, replace imports like: " "`from langchain.pydantic_v1 import BaseModel`\n" "with: `from pydantic import BaseModel`\n" - "or the v1 compatibility namespace if you are working in a code base " - "that has not been fully upgraded to pydantic 2 yet. " - "\tfrom pydantic.v1 import BaseModel\n" - ), -) + ) + + +_raise_import_error() diff --git a/libs/langchain/langchain/pydantic_v1/main.py b/libs/langchain/langchain/pydantic_v1/main.py index d366b5a7ea4..6fc19904561 100644 --- a/libs/langchain/langchain/pydantic_v1/main.py +++ b/libs/langchain/langchain/pydantic_v1/main.py @@ -1,24 +1,14 @@ -from langchain_core._api import warn_deprecated - -try: - from pydantic.v1.main import * # noqa: F403 -except ImportError: - from pydantic.main import * # type: ignore # noqa: F403 - -warn_deprecated( - "0.3.0", - removal="1.0.0", - alternative="pydantic.v1 or pydantic", - message=( - "As of langchain-core 0.3.0, LangChain uses pydantic v2 internally. " - "The langchain.pydantic_v1 module was a " - "compatibility shim for pydantic v1, and should no longer be used. " - "Please update the code to import from Pydantic directly.\n\n" +def _raise_import_error() -> None: + """Raise ImportError with a helpful message.""" + raise ImportError( + "Please do not import from langchain.pydantic_v1.*." + "This module was a compatibility shim for pydantic v1, and should " + "no longer be used " + "Please update the code to import from Pydantic directly. " "For example, replace imports like: " "`from langchain.pydantic_v1 import BaseModel`\n" "with: `from pydantic import BaseModel`\n" - "or the v1 compatibility namespace if you are working in a code base " - "that has not been fully upgraded to pydantic 2 yet. " - "\tfrom pydantic.v1 import BaseModel\n" - ), -) + ) + + +_raise_import_error()