🚸 Add App.dict(); represent as JSON
This commit is contained in:
parent
3ebebe7fbd
commit
9becfc857d
1 changed files with 26 additions and 14 deletions
|
|
@ -2,10 +2,11 @@
|
|||
import copy
|
||||
import importlib
|
||||
import importlib.util
|
||||
import json
|
||||
import pkgutil
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Optional
|
||||
from typing import Any, Dict, Generator, List, Optional
|
||||
|
||||
import click
|
||||
from aerich import Command as AerichCommand
|
||||
|
|
@ -218,28 +219,39 @@ class App:
|
|||
pass
|
||||
|
||||
def __repr__(self):
|
||||
out = ""
|
||||
out += f"App: {self.name}\n"
|
||||
out += f"Models:\n"
|
||||
for model in self.models:
|
||||
out += f" - {model.__name__}\n"
|
||||
out += "Routes:\n"
|
||||
for route in (self.routes or []):
|
||||
out += f" - {route}\n"
|
||||
return out
|
||||
return json.dumps(self.dict(), indent=2)
|
||||
|
||||
def __str__(self):
|
||||
return self.__repr__()
|
||||
|
||||
def _serialize_route(self, route):
|
||||
"""Convert APIRoute to JSON-serializable dict."""
|
||||
return {
|
||||
"path": route.path,
|
||||
"name": route.name,
|
||||
"methods": list(route.methods),
|
||||
"endpoint": route.endpoint.__name__, # just the function name
|
||||
"response_model": getattr(route, "response_model", None).__name__
|
||||
if getattr(route, "response_model", None) else None,
|
||||
"tags": getattr(route, "tags", None),
|
||||
}
|
||||
|
||||
def _serialize_router(self):
|
||||
return [self._serialize_route(route) for route in self.routes]
|
||||
|
||||
def dict(self) -> Dict[str, Any]:
|
||||
return {
|
||||
'models': [m.__name__ for m in self.models],
|
||||
'routes': self._serialize_router(),
|
||||
}
|
||||
|
||||
@property
|
||||
def models(self) -> List[Model]:
|
||||
models: List[Model] = []
|
||||
def models(self) -> Generator[Model, None, None]:
|
||||
for mod in self.model_modules:
|
||||
models_mod = importlib.import_module(mod)
|
||||
for obj in models_mod.__dict__.values():
|
||||
if isinstance(obj, type) and getattr(obj, "_meta", None) is not None and obj.__name__ != 'Model':
|
||||
models.append(obj)
|
||||
return models
|
||||
yield obj
|
||||
|
||||
@property
|
||||
def routes(self):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue