From b25f6883e1c34603503c0f00784ed1de6b8d6ce1 Mon Sep 17 00:00:00 2001 From: Yurii Karabas <1998uriyyo@gmail.com> Date: Tue, 5 Mar 2024 14:25:54 +0200 Subject: [PATCH] Suppress undefined annotation exception for pydantic v2 (#1069) * Rebuild model only in case if customization present * Suppress undefined annotation exceptions --- fastapi_pagination/bases.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/fastapi_pagination/bases.py b/fastapi_pagination/bases.py index cc4a0ff0..f633dcc2 100644 --- a/fastapi_pagination/bases.py +++ b/fastapi_pagination/bases.py @@ -14,6 +14,7 @@ import inspect import warnings from abc import ABC, abstractmethod +from contextlib import suppress from dataclasses import dataclass from typing import ( TYPE_CHECKING, @@ -40,6 +41,14 @@ from pydantic.generics import GenericModel +try: + from pydantic import PydanticUndefinedAnnotation # type: ignore[attr-defined] +except ImportError: + + class PydanticUndefinedAnnotation(Exception): # type: ignore[no-redef] + pass + + from typing_extensions import Self, TypeGuard, deprecated from .types import Cursor, GreaterEqualZero, ParamsType @@ -158,7 +167,10 @@ def __pydantic_init_subclass__(cls, **kwargs: Any) -> None: for name, alias in cls.__model_aliases__.items(): cls.model_fields[name].serialization_alias = alias - cls.model_rebuild(force=True) + # rebuild model only in case if customizations is present + if cls.__model_exclude__ or cls.__model_aliases__: + with suppress(PydanticUndefinedAnnotation): + cls.model_rebuild(force=True) def __init_subclass__(cls, **kwargs: Any) -> None: try: