Coverage for tests/pydantic_specific/test_prebuild.py: 100%

20 statements  

« prev     ^ index     » next       coverage.py v7.17.3, created at 2026-11-13 05:19 +0000

1from __future__ import annotations 1abcdefghijklmno

2 

3from pydantic import BaseModel 1abcdefghijklmno

4 

5from fast_depends import Provider 1abcdefghijklmno

6from fast_depends.core import build_call_model 1abcdefghijklmno

7from fast_depends.pydantic import PydanticSerializer 1abcdefghijklmno

8from fast_depends.pydantic._compat import PYDANTIC_V2 1abcdefghijklmno

9 

10from .wrapper import noop_wrap 1abcdefghijklmno

11 

12 

13class Model(BaseModel): 1abcdefghijklmno

14 a: str 1abcdefghijklmno

15 

16 

17def model_func(m: Model) -> str: 1abcdefghijklmno

18 return m.a 1abcdefghijklmno

19 

20 

21def test_prebuild_with_wrapper() -> None: 1abcdefghijklmno

22 func = noop_wrap(model_func) 1abcdefghijklmno

23 assert func(Model(a="Hi!")) == "Hi!" 1abcdefghijklmno

24 

25 # build_call_model should work even if function is wrapped with a 

26 # wrapper that is imported from different module 

27 call_model = build_call_model( 1abcdefghijklmno

28 func, 

29 dependency_provider=Provider(), 

30 serializer_cls=PydanticSerializer(use_fastdepends_errors=True), 

31 ) 

32 

33 model = call_model.serializer.model 1abcdefghijklmno

34 assert model 1abcdefghijklmno

35 # Fails if function unwrapping is not done at type introspection 

36 

37 if PYDANTIC_V2: 1abcdefghijklmno

38 model.model_rebuild() 1cdfhjklmno

39 else: 

40 # pydantic v1 

41 model.update_forward_refs() 1abegi