Coverage for tests/test_validate_response_recursive/app.py: 100%

26 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2025-09-09 09:16 +0000

1from typing import List 1abcdef

2 

3from fastapi import FastAPI 1abcdef

4from fastapi._compat import PYDANTIC_V2 1abcdef

5from pydantic import BaseModel 1abcdef

6 

7app = FastAPI() 1abcdef

8 

9 

10class RecursiveItem(BaseModel): 1abcdef

11 sub_items: List["RecursiveItem"] = [] 1abcdef

12 name: str 1abcdef

13 

14 

15class RecursiveSubitemInSubmodel(BaseModel): 1abcdef

16 sub_items2: List["RecursiveItemViaSubmodel"] = [] 1abcdef

17 name: str 1abcdef

18 

19 

20class RecursiveItemViaSubmodel(BaseModel): 1abcdef

21 sub_items1: List[RecursiveSubitemInSubmodel] = [] 1abcdef

22 name: str 1abcdef

23 

24 

25if PYDANTIC_V2: 1abcdef

26 RecursiveItem.model_rebuild() 1abcdef

27 RecursiveSubitemInSubmodel.model_rebuild() 1abcdef

28 RecursiveItemViaSubmodel.model_rebuild() 1abcdef

29else: 

30 RecursiveItem.update_forward_refs() 1abcdef

31 RecursiveSubitemInSubmodel.update_forward_refs() 1abcdef

32 

33 

34@app.get("/items/recursive", response_model=RecursiveItem) 1abcdef

35def get_recursive(): 1abcdef

36 return {"name": "item", "sub_items": [{"name": "subitem", "sub_items": []}]} 1ghijkl

37 

38 

39@app.get("/items/recursive-submodel", response_model=RecursiveItemViaSubmodel) 1abcdef

40def get_recursive_submodel(): 1abcdef

41 return { 1ghijkl

42 "name": "item", 

43 "sub_items1": [ 

44 { 

45 "name": "subitem", 

46 "sub_items2": [ 

47 { 

48 "name": "subsubitem", 

49 "sub_items1": [{"name": "subsubsubitem", "sub_items2": []}], 

50 } 

51 ], 

52 } 

53 ], 

54 }