Coverage for docs_src/app_testing/app_b_an/main.py: 100%

26 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2025-12-04 08:29 +0000

1from typing import Union 1abcdefg

2 

3from fastapi import FastAPI, Header, HTTPException 1abcdefg

4from pydantic import BaseModel 1abcdefg

5from typing_extensions import Annotated 1abcdefg

6 

7fake_secret_token = "coneofsilence" 1abcdefg

8 

9fake_db = { 1abcdefg

10 "foo": {"id": "foo", "title": "Foo", "description": "There goes my hero"}, 

11 "bar": {"id": "bar", "title": "Bar", "description": "The bartenders"}, 

12} 

13 

14app = FastAPI() 1abcdefg

15 

16 

17class Item(BaseModel): 1abcdefg

18 id: str 1abcdefg

19 title: str 1abcdefg

20 description: Union[str, None] = None 1abcdefg

21 

22 

23@app.get("/items/{item_id}", response_model=Item) 1abcdefg

24async def read_main(item_id: str, x_token: Annotated[str, Header()]): 1abcdefg

25 if x_token != fake_secret_token: 1hijklmn

26 raise HTTPException(status_code=400, detail="Invalid X-Token header") 1hijklmn

27 if item_id not in fake_db: 1hijklmn

28 raise HTTPException(status_code=404, detail="Item not found") 1hijklmn

29 return fake_db[item_id] 1hijklmn

30 

31 

32@app.post("/items/", response_model=Item) 1abcdefg

33async def create_item(item: Item, x_token: Annotated[str, Header()]): 1abcdefg

34 if x_token != fake_secret_token: 1hijklmn

35 raise HTTPException(status_code=400, detail="Invalid X-Token header") 1hijklmn

36 if item.id in fake_db: 1hijklmn

37 raise HTTPException(status_code=409, detail="Item already exists") 1hijklmn

38 fake_db[item.id] = item 1hijklmn

39 return item 1hijklmn