Pydantic Compat

0.1.2 · active · verified Thu Apr 16

pydantic-compat is a compatibility layer designed to help developers write code that works seamlessly with both Pydantic v1 and v2. It provides common interfaces, aliases, and wrappers for key Pydantic components, allowing libraries and applications to support different Pydantic major versions without extensive conditional logic. The current version is 0.1.2, and it follows an as-needed release cadence to address compatibility needs.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to define a model using `CompatModel` and use `model_validator` for cross-version compatible validation. It also shows how to leverage `ConfigDict` for defining model configurations that adapt to Pydantic v1's `class Config` or v2's `model_config`.

from pydantic_compat import CompatModel, model_validator, FieldValidationInfo
from typing import ClassVar
import pydantic # To check version directly if needed

class MyConfig(CompatModel):
    my_field: str
    version_info: ClassVar[str] = ""

    @model_validator(mode='after')
    def check_version(self, info: FieldValidationInfo):
        # Access original pydantic version for conditional logic
        if pydantic.VERSION.startswith('1.'):
            self.version_info = "Pydantic v1 compatible"
        else:
            self.version_info = "Pydantic v2 compatible"
        return self

# This will adapt based on the installed Pydantic version
config_instance = MyConfig(my_field="hello world")
print(f"MyField: {config_instance.my_field}")
print(f"Compatibility Info: {config_instance.version_info}")

# Example with ConfigDict (for Pydantic v2 style config)
from pydantic_compat import ConfigDict

class MyModelWithConfig(CompatModel):
    model_config = ConfigDict(extra='ignore', frozen=True)
    value: int

model_instance = MyModelWithConfig(value=123, unknown_field="ignored")
print(f"Model Configured Value: {model_instance.value}")

view raw JSON →