Coverage for tests/test_validate_response_recursive/app.py: 100%
26 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-12-04 08:29 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2025-12-04 08:29 +0000
1from typing import List 1abcdefg
3from fastapi import FastAPI 1abcdefg
4from fastapi._compat import PYDANTIC_V2 1abcdefg
5from pydantic import BaseModel 1abcdefg
7app = FastAPI() 1abcdefg
10class RecursiveItem(BaseModel): 1abcdefg
11 sub_items: List["RecursiveItem"] = [] 1abcdefg
12 name: str 1abcdefg
15class RecursiveSubitemInSubmodel(BaseModel): 1abcdefg
16 sub_items2: List["RecursiveItemViaSubmodel"] = [] 1abcdefg
17 name: str 1abcdefg
20class RecursiveItemViaSubmodel(BaseModel): 1abcdefg
21 sub_items1: List[RecursiveSubitemInSubmodel] = [] 1abcdefg
22 name: str 1abcdefg
25if PYDANTIC_V2: 1abcdefg
26 RecursiveItem.model_rebuild() 1abcdefg
27 RecursiveSubitemInSubmodel.model_rebuild() 1abcdefg
28 RecursiveItemViaSubmodel.model_rebuild() 1abcdefg
29else:
30 RecursiveItem.update_forward_refs() 1abcdef
31 RecursiveSubitemInSubmodel.update_forward_refs() 1abcdef
34@app.get("/items/recursive", response_model=RecursiveItem) 1abcdefg
35def get_recursive(): 1abcdefg
36 return {"name": "item", "sub_items": [{"name": "subitem", "sub_items": []}]} 1hijklmn
39@app.get("/items/recursive-submodel", response_model=RecursiveItemViaSubmodel) 1abcdefg
40def get_recursive_submodel(): 1abcdefg
41 return { 1hijklmn
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 }