Skip to content

Commit 2ce73fe

Browse files
committed
Show API summary
1 parent df59b19 commit 2ce73fe

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

fps/app.py

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

1012
from fps import hooks
1113
from fps.config import Config, FPSConfig, create_default_plugin_model
@@ -271,6 +273,29 @@ 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+
283+
openapi = app.openapi()
284+
for k, v in openapi["paths"].items():
285+
path = k
286+
methods = ", ".join([method.upper() for method in v.keys()])
287+
plugin = ", ".join({tag for i in v.values() for tag in i["tags"]})
288+
table.add_row(path, methods, plugin)
289+
290+
console = Console()
291+
with console.capture() as capture:
292+
console.print()
293+
console.print(table)
294+
295+
str_output = capture.get()
296+
logger.info(str_output)
297+
298+
274299
def create_app():
275300

276301
logging.getLogger("fps")
@@ -286,4 +311,6 @@ def create_app():
286311

287312
Config.check_not_used_sections()
288313

314+
show_endpoints(app)
315+
289316
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)