diff --git a/cachetory/serializers/compressors/zlib.py b/cachetory/serializers/compressors/zlib.py index 3c69b62..ec67d51 100644 --- a/cachetory/serializers/compressors/zlib.py +++ b/cachetory/serializers/compressors/zlib.py @@ -3,7 +3,8 @@ import zlib from urllib.parse import parse_qsl, urlparse -from pydantic import BaseModel, Field, conint +from pydantic import BaseModel, Field +from typing_extensions import Annotated from cachetory.interfaces.serializers import Serializer @@ -28,7 +29,7 @@ def from_url(cls, url: str) -> ZlibCompressor: |---------------------|-----------------------------------------------------------------| | `compression-level` | From `0` (no compression) to `9` (slowest and best compression) | """ - params = _UrlParams.parse_obj(dict(parse_qsl(urlparse(url).query))) + params = _UrlParams.model_validate(dict(parse_qsl(urlparse(url).query))) return cls(compression_level=params.compression_level) def __init__(self, *, compression_level: int = zlib.Z_DEFAULT_COMPRESSION) -> None: @@ -42,7 +43,7 @@ def deserialize(self, data: bytes) -> bytes: class _UrlParams(BaseModel): - compression_level: conint(ge=-1, le=9) = Field( # type: ignore + compression_level: Annotated[int, Field(ge=-1, le=9)] = Field( zlib.Z_DEFAULT_COMPRESSION, alias="compression-level", ) diff --git a/cachetory/serializers/compressors/zstd.py b/cachetory/serializers/compressors/zstd.py index 7c9c74c..fb159be 100644 --- a/cachetory/serializers/compressors/zstd.py +++ b/cachetory/serializers/compressors/zstd.py @@ -3,7 +3,8 @@ from urllib.parse import parse_qsl, urlparse import zstd # type: ignore -from pydantic import BaseModel, Field, conint +from pydantic import BaseModel, Field +from typing_extensions import Annotated from cachetory.interfaces.serializers import Serializer @@ -35,7 +36,7 @@ def from_url(cls, url: str) -> ZstdCompressor: | `compression-level` | [Compression level](https://github.com/sergey-dryabzhinsky/python-zstd#api) | | `compression-threads` | [Number of threads](https://github.com/sergey-dryabzhinsky/python-zstd#api) | """ - params = _UrlParams.parse_obj(dict(parse_qsl(urlparse(url).query))) + params = _UrlParams.model_validate(dict(parse_qsl(urlparse(url).query))) return cls(compression_level=params.compression_level, compression_threads=params.compression_threads) def __init__( @@ -56,4 +57,4 @@ def deserialize(self, data: bytes) -> bytes: class _UrlParams(BaseModel): compression_level: int = Field(3, alias="compression-level") - compression_threads: conint(ge=0) = Field(0, alias="compression-threads") # type: ignore + compression_threads: Annotated[int, Field(ge=0)] = Field(0, alias="compression-threads") diff --git a/cachetory/serializers/pickle.py b/cachetory/serializers/pickle.py index 491cfde..714d56e 100644 --- a/cachetory/serializers/pickle.py +++ b/cachetory/serializers/pickle.py @@ -4,7 +4,8 @@ from typing import Generic from urllib.parse import parse_qsl, urlparse -from pydantic import BaseModel, Field, conint +from pydantic import BaseModel, Field +from typing_extensions import Annotated from cachetory.interfaces.serializers import Serializer, ValueT @@ -33,7 +34,7 @@ def from_url(cls, url: str) -> PickleSerializer[ValueT]: |-------------------|---------------------------| | `pickle-protocol` | `pickle` protocol version | """ - params = _UrlParams.parse_obj(dict(parse_qsl(urlparse(url).query))) + params = _UrlParams.model_validate(dict(parse_qsl(urlparse(url).query))) return cls(pickle_protocol=params.pickle_protocol) def __init__(self, pickle_protocol: int = pickle.HIGHEST_PROTOCOL) -> None: @@ -53,7 +54,7 @@ def deserialize(self, data: bytes) -> ValueT: class _UrlParams(BaseModel): - pickle_protocol: conint(ge=0, le=pickle.HIGHEST_PROTOCOL) = Field( # type: ignore + pickle_protocol: Annotated[int, Field(ge=0, le=pickle.HIGHEST_PROTOCOL)] = Field( pickle.HIGHEST_PROTOCOL, alias="pickle-protocol", ) diff --git a/pyproject.toml b/pyproject.toml index 72c40a3..04ed2ee 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,7 @@ build-backend = "poetry_dynamic_versioning.backend" [tool.poetry.dependencies] django = {version = "^4.0.0", optional = true} ormsgpack = {version = "^1.4.0", optional = true, markers = "platform_python_implementation == 'CPython'"} -pydantic = "<3.0.0" +pydantic = ">2.0.0.0, <3.0.0.0" python = "^3.8.0" redis = {version = "^4.4.2 || ^5.0.0", optional = true} typing-extensions = "^4.4.0"