Allow using Pydantic v2 (#533)
Co-authored-by: Chayim <chayim@users.noreply.github.com>
This commit is contained in:
parent
323787151e
commit
3a0fa0c7be
10 changed files with 45 additions and 14 deletions
2
Makefile
2
Makefile
|
@ -54,7 +54,7 @@ lint: $(INSTALL_STAMP) dist
|
|||
$(POETRY) run isort --profile=black --lines-after-imports=2 ./tests/ $(NAME) $(SYNC_NAME)
|
||||
$(POETRY) run black ./tests/ $(NAME)
|
||||
$(POETRY) run flake8 --ignore=W503,E501,F401,E731 ./tests/ $(NAME) $(SYNC_NAME)
|
||||
$(POETRY) run mypy ./tests/ $(NAME) $(SYNC_NAME) --ignore-missing-imports --exclude migrate.py
|
||||
$(POETRY) run mypy ./tests/ $(NAME) $(SYNC_NAME) --ignore-missing-imports --exclude migrate.py --exclude _compat\.py$
|
||||
$(POETRY) run bandit -r $(NAME) $(SYNC_NAME) -s B608
|
||||
|
||||
.PHONY: format
|
||||
|
|
19
aredis_om/_compat.py
Normal file
19
aredis_om/_compat.py
Normal file
|
@ -0,0 +1,19 @@
|
|||
from pydantic.version import VERSION as PYDANTIC_VERSION
|
||||
|
||||
|
||||
PYDANTIC_V2 = PYDANTIC_VERSION.startswith("2.")
|
||||
|
||||
if PYDANTIC_V2:
|
||||
from pydantic.v1 import BaseModel, validator
|
||||
from pydantic.v1.fields import FieldInfo, ModelField, Undefined, UndefinedType
|
||||
from pydantic.v1.json import ENCODERS_BY_TYPE
|
||||
from pydantic.v1.main import ModelMetaclass, validate_model
|
||||
from pydantic.v1.typing import NoArgAnyCallable
|
||||
from pydantic.v1.utils import Representation
|
||||
else:
|
||||
from pydantic import BaseModel, validator
|
||||
from pydantic.fields import FieldInfo, ModelField, Undefined, UndefinedType
|
||||
from pydantic.json import ENCODERS_BY_TYPE
|
||||
from pydantic.main import ModelMetaclass, validate_model
|
||||
from pydantic.typing import NoArgAnyCallable
|
||||
from pydantic.utils import Representation
|
|
@ -31,8 +31,7 @@ from pathlib import PurePath
|
|||
from types import GeneratorType
|
||||
from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union
|
||||
|
||||
from pydantic import BaseModel
|
||||
from pydantic.json import ENCODERS_BY_TYPE
|
||||
from .._compat import ENCODERS_BY_TYPE, BaseModel
|
||||
|
||||
|
||||
SetIntStr = Set[Union[int, str]]
|
||||
|
|
|
@ -25,18 +25,24 @@ from typing import (
|
|||
)
|
||||
|
||||
from more_itertools import ichunked
|
||||
from pydantic import BaseModel, validator
|
||||
from pydantic.fields import FieldInfo as PydanticFieldInfo
|
||||
from pydantic.fields import ModelField, Undefined, UndefinedType
|
||||
from pydantic.main import ModelMetaclass, validate_model
|
||||
from pydantic.typing import NoArgAnyCallable
|
||||
from pydantic.utils import Representation
|
||||
from redis.commands.json.path import Path
|
||||
from redis.exceptions import ResponseError
|
||||
from typing_extensions import Protocol, get_args, get_origin
|
||||
from ulid import ULID
|
||||
|
||||
from .. import redis
|
||||
from .._compat import BaseModel
|
||||
from .._compat import FieldInfo as PydanticFieldInfo
|
||||
from .._compat import (
|
||||
ModelField,
|
||||
ModelMetaclass,
|
||||
NoArgAnyCallable,
|
||||
Representation,
|
||||
Undefined,
|
||||
UndefinedType,
|
||||
validate_model,
|
||||
validator,
|
||||
)
|
||||
from ..checks import has_redis_json, has_redisearch
|
||||
from ..connections import get_redis_connection
|
||||
from ..util import ASYNC_MODE
|
||||
|
|
|
@ -37,7 +37,7 @@ include=[
|
|||
[tool.poetry.dependencies]
|
||||
python = ">=3.7,<4.0"
|
||||
redis = ">=3.5.3,<5.0.0"
|
||||
pydantic = "^1.10.2"
|
||||
pydantic = ">=1.10.2,<2.1.0"
|
||||
click = "^8.0.1"
|
||||
types-redis = ">=3.5.9,<5.0.0"
|
||||
python-ulid = "^1.0.3"
|
||||
|
|
7
tests/_compat.py
Normal file
7
tests/_compat.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
from aredis_om._compat import PYDANTIC_V2
|
||||
|
||||
|
||||
if PYDANTIC_V2:
|
||||
from pydantic.v1 import EmailStr, ValidationError
|
||||
else:
|
||||
from pydantic import EmailStr, ValidationError
|
|
@ -10,7 +10,6 @@ from unittest import mock
|
|||
|
||||
import pytest
|
||||
import pytest_asyncio
|
||||
from pydantic import ValidationError
|
||||
|
||||
from aredis_om import (
|
||||
Field,
|
||||
|
@ -24,6 +23,7 @@ from aredis_om import (
|
|||
# We need to run this check as sync code (during tests) even in async mode
|
||||
# because we call it in the top-level module scope.
|
||||
from redis_om import has_redisearch
|
||||
from tests._compat import ValidationError
|
||||
|
||||
from .conftest import py_test_mark_asyncio
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@ from unittest import mock
|
|||
|
||||
import pytest
|
||||
import pytest_asyncio
|
||||
from pydantic import ValidationError
|
||||
|
||||
from aredis_om import (
|
||||
EmbeddedJsonModel,
|
||||
|
@ -25,6 +24,7 @@ from aredis_om import (
|
|||
# We need to run this check as sync code (during tests) even in async mode
|
||||
# because we call it in the top-level module scope.
|
||||
from redis_om import has_redis_json
|
||||
from tests._compat import ValidationError
|
||||
|
||||
from .conftest import py_test_mark_asyncio
|
||||
|
||||
|
|
|
@ -6,9 +6,9 @@ from typing import Optional
|
|||
|
||||
import pytest
|
||||
import pytest_asyncio
|
||||
from pydantic import ValidationError
|
||||
|
||||
from aredis_om import HashModel, Migrator, NotFoundError, RedisModelError
|
||||
from tests._compat import ValidationError
|
||||
|
||||
from .conftest import py_test_mark_asyncio
|
||||
|
||||
|
|
|
@ -4,9 +4,9 @@ from collections import namedtuple
|
|||
|
||||
import pytest
|
||||
import pytest_asyncio
|
||||
from pydantic import EmailStr, ValidationError
|
||||
|
||||
from aredis_om import Field, HashModel, Migrator
|
||||
from tests._compat import EmailStr, ValidationError
|
||||
|
||||
|
||||
today = datetime.date.today()
|
||||
|
|
Loading…
Reference in a new issue