1- from typing import Any , List , Optional , Set , Union , get_origin
1+ from inspect import cleandoc
2+ from typing import Any , List , Optional , Set , Tuple , Union , get_origin
23
34from fastapi import APIRouter , HTTPException , Request
45from pydantic import BaseModel
@@ -20,6 +21,8 @@ def add_state_routes(
2021 field : str = "" ,
2122 model : Union [BaseModel , List [BaseModel ]] = None ,
2223 subroute_key : Any = None ,
24+ keyby : Tuple [str , ...] = (),
25+ indexer : Optional [Union [str , int ]] = None ,
2326) -> None :
2427 if model and get_origin (model ) is list :
2528 list_model = model
@@ -29,6 +32,13 @@ def add_state_routes(
2932 # Get the fully qualified type name for the description
3033 fq_type_name = get_fully_qualified_type_name (model )
3134
35+ keyby_lines = []
36+ if keyby :
37+ keyby_lines .append ("**Keyed by:** ``{}``" .format (", " .join (repr (k ) for k in keyby )))
38+ if indexer is not None :
39+ keyby_lines .append ("**Indexer:** ``{!r}``" .format (indexer ))
40+ keyby_prefix = ("\n \n " .join (keyby_lines ) + "\n \n " ) if keyby_lines else ""
41+
3242 if subroute_key :
3343 # Prune s_ from start
3444 name_without_state = field [2 :]
@@ -88,6 +98,7 @@ async def get_state(key: str, query: Optional[Query] = query_json(), request: Re
8898 responses = get_default_responses (),
8999 response_model = list_model , # type: ignore[valid-type]
90100 name = "Get State {} by key" .format (name_without_state ),
101+ description = keyby_prefix + cleandoc (get_state .__doc__ or "" ),
91102 openapi_extra = {"type_" : fq_type_name } if fq_type_name else None ,
92103 )(get_state )
93104
@@ -167,6 +178,7 @@ async def get_state(query: Optional[Query] = query_json(), request: Request = No
167178 responses = get_default_responses (),
168179 response_model = list_model , # type: ignore[valid-type]
169180 name = "Get State {}" .format (name_without_state ),
181+ description = keyby_prefix + cleandoc (get_state .__doc__ or "" ),
170182 openapi_extra = {"type_" : fq_type_name } if fq_type_name else None ,
171183 )(get_state )
172184
0 commit comments