Skip to content

Commit 57c2db2

Browse files
committed
Show API summary
1 parent df59b19 commit 57c2db2

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

fps/app.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import pluggy
66
from fastapi import FastAPI
77
from pluggy import PluginManager
8+
from rich.console import Console
9+
from rich.table import Table
810
from starlette.routing import Mount
911

1012
from fps import hooks
@@ -271,6 +273,28 @@ def _load_routers(app: FastAPI) -> None:
271273
logger.info("No plugin API router to load")
272274

273275

276+
def show_endpoints(app: FastAPI):
277+
table = Table(title="API Summary")
278+
table.add_column("Path", justify="left", style="cyan", no_wrap=True)
279+
table.add_column("Methods", justify="right", style="green")
280+
table.add_column("Plugin", style="magenta")
281+
282+
openapi = app.openapi()
283+
for k, v in openapi["paths"].items():
284+
path = k
285+
methods = ", ".join([method.upper() for method in v.keys()])
286+
plugin = ", ".join({tag for i in v.values() for tag in i["tags"]})
287+
table.add_row(path, methods, plugin)
288+
289+
console = Console()
290+
with console.capture() as capture:
291+
console.print()
292+
console.print(table)
293+
294+
str_output = capture.get()
295+
logger.info(str_output)
296+
297+
274298
def create_app():
275299

276300
logging.getLogger("fps")
@@ -286,4 +310,6 @@ def create_app():
286310

287311
Config.check_not_used_sections()
288312

313+
show_endpoints(app)
314+
289315
return app

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ install_requires =
2424
fastapi
2525
pluggy>=1.0,<2.0
2626
click
27+
rich
2728

2829
[options.extras_require]
2930
uvicorn =

0 commit comments

Comments
 (0)