Coverage for docs_src/query_params_str_validations/tutorial015_an_py310.py: 100%
16 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-05-05 00:03 +0000
« prev ^ index » next coverage.py v7.6.1, created at 2025-05-05 00:03 +0000
1import random 1abcd
2from typing import Annotated 1abcd
4from fastapi import FastAPI 1abcd
5from pydantic import AfterValidator 1abcd
7app = FastAPI() 1abcd
9data = { 1abcd
10 "isbn-9781529046137": "The Hitchhiker's Guide to the Galaxy",
11 "imdb-tt0371724": "The Hitchhiker's Guide to the Galaxy",
12 "isbn-9781439512982": "Isaac Asimov: The Complete Stories, Vol. 2",
13}
16def check_valid_id(id: str): 1abcd
17 if not id.startswith(("isbn-", "imdb-")): 1qefrghsijtkl
18 raise ValueError('Invalid ID format, it must start with "isbn-" or "imdb-"') 1qrst
19 return id 1efghijkl
22@app.get("/items/") 1abcd
23async def read_items( 1abcd
24 id: Annotated[str | None, AfterValidator(check_valid_id)] = None,
25):
26 if id: 1efmghnijoklp
27 item = data.get(id) 1efghijkl
28 else:
29 id, item = random.choice(list(data.items())) 1mnop
30 return {"id": id, "name": item} 1efmghnijoklp