diff --git a/django_pydantic_field/v1/__init__.py b/django_pydantic_field/v1/__init__.py index 18afb0d..0a9ff24 100644 --- a/django_pydantic_field/v1/__init__.py +++ b/django_pydantic_field/v1/__init__.py @@ -1,6 +1 @@ -from django_pydantic_field.compat.pydantic import PYDANTIC_V1 - -if not PYDANTIC_V1: - raise ImportError("django_pydantic_field.v1 package is only compatible with Pydantic v1") - from .fields import * # noqa: F403 diff --git a/django_pydantic_field/v1/base.py b/django_pydantic_field/v1/base.py index 414e369..b85994b 100644 --- a/django_pydantic_field/v1/base.py +++ b/django_pydantic_field/v1/base.py @@ -1,9 +1,15 @@ import typing as t -import pydantic +try: + from pydantic import v1 as pydantic + from pydantic.v1.json import pydantic_encoder + from pydantic.v1.typing import display_as_type +except ImportError: + import pydantic + from pydantic.json import pydantic_encoder + from pydantic.typing import display_as_type + from django.core.serializers.json import DjangoJSONEncoder -from pydantic.json import pydantic_encoder -from pydantic.typing import display_as_type from .utils import get_local_namespace, inherit_configs diff --git a/django_pydantic_field/v1/fields.py b/django_pydantic_field/v1/fields.py index 22a7850..00bb89f 100644 --- a/django_pydantic_field/v1/fields.py +++ b/django_pydantic_field/v1/fields.py @@ -3,7 +3,11 @@ import typing as t from functools import partial -import pydantic +try: + import pydantic.v1 as pydantic +except ImportError: + import pydantic + from django.core import exceptions as django_exceptions from django.db.models.expressions import BaseExpression, Value from django.db.models.fields import NOT_PROVIDED diff --git a/django_pydantic_field/v1/forms.py b/django_pydantic_field/v1/forms.py index 6cfaad4..e1236e1 100644 --- a/django_pydantic_field/v1/forms.py +++ b/django_pydantic_field/v1/forms.py @@ -3,7 +3,11 @@ import typing as t from functools import partial -import pydantic +try: + import pydantic.v1 as pydantic +except ImportError: + import pydantic + from django.core.exceptions import ValidationError from django.forms.fields import InvalidJSONInput, JSONField from django.utils.translation import gettext_lazy as _ diff --git a/django_pydantic_field/v1/rest_framework.py b/django_pydantic_field/v1/rest_framework.py index dc2721e..a7e02ae 100644 --- a/django_pydantic_field/v1/rest_framework.py +++ b/django_pydantic_field/v1/rest_framework.py @@ -1,7 +1,12 @@ import typing as t from django.conf import settings -from pydantic import BaseModel, ValidationError + +try: + from pydantic.v1 import BaseModel, ValidationError +except ImportError: + from pydantic import BaseModel, ValidationError + from rest_framework import exceptions, parsers, renderers, serializers from rest_framework.schemas import openapi from rest_framework.schemas.utils import is_list_view diff --git a/django_pydantic_field/v1/utils.py b/django_pydantic_field/v1/utils.py index 3a8622b..1a31f24 100644 --- a/django_pydantic_field/v1/utils.py +++ b/django_pydantic_field/v1/utils.py @@ -3,7 +3,10 @@ import sys import typing as t -from pydantic.config import BaseConfig, inherit_config +try: + from pydantic.v1.config import BaseConfig, inherit_config +except ImportError: + from pydantic.config import BaseConfig, inherit_config if t.TYPE_CHECKING: from pydantic import BaseModel diff --git a/tests/v1/schema.py b/tests/v1/schema.py new file mode 100644 index 0000000..c984e8a --- /dev/null +++ b/tests/v1/schema.py @@ -0,0 +1,26 @@ +import typing as t +from datetime import date + +try: + import pydantic.v1 as pydantic +except ImportError: + import pydantic + +from pydantic.dataclasses import dataclass + + +class InnerSchema(pydantic.BaseModel): + stub_str: str + stub_int: int = 1 + stub_list: t.List[date] + + class Config: + allow_mutation = True + frozen = False + + +@dataclass +class SampleDataclass: + stub_str: str + stub_list: t.List[date] + stub_int: int = 1 diff --git a/tests/v1/test_base.py b/tests/v1/test_base.py index 8637e30..686c9f9 100644 --- a/tests/v1/test_base.py +++ b/tests/v1/test_base.py @@ -3,10 +3,14 @@ from datetime import date from uuid import UUID -import pydantic +try: + import pydantic.v1 as pydantic +except ImportError: + import pydantic + import pytest -from tests.conftest import InnerSchema, SampleDataclass +from .schema import InnerSchema, SampleDataclass base = pytest.importorskip("django_pydantic_field.v1.base") diff --git a/tests/v1/test_forms.py b/tests/v1/test_forms.py index a816d25..36e4c34 100644 --- a/tests/v1/test_forms.py +++ b/tests/v1/test_forms.py @@ -5,7 +5,7 @@ from django.core.exceptions import ValidationError from django.forms import Form, modelform_factory -from tests.conftest import InnerSchema +from .schema import InnerSchema from tests.test_app.models import SampleForwardRefModel, SampleSchema fields = pytest.importorskip("django_pydantic_field.v1.fields") diff --git a/tests/v1/test_rest_framework.py b/tests/v1/test_rest_framework.py index f23bbdf..06333bf 100644 --- a/tests/v1/test_rest_framework.py +++ b/tests/v1/test_rest_framework.py @@ -9,7 +9,7 @@ from rest_framework.decorators import api_view, parser_classes, renderer_classes, schema from rest_framework.response import Response -from tests.conftest import InnerSchema +from .schema import InnerSchema from tests.test_app.models import SampleModel rest_framework = pytest.importorskip("django_pydantic_field.v1.rest_framework")