fastapi-voyager 0.4.2__tar.gz → 0.4.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/PKG-INFO +1 -1
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/graph.py +1 -1
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/type_helper.py +24 -7
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/version.py +1 -1
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/tests/demo_anno.py +7 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/.gitignore +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/LICENSE +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/README.md +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/pyproject.toml +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/__init__.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/cli.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/filter.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/module.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/server.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/type.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/component/route-code-display.js +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/component/schema-code-display.js +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/component/schema-field-filter.js +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/graph-ui.js +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/graphviz.svg.css +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/graphviz.svg.js +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/icon/android-chrome-192x192.png +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/icon/android-chrome-512x512.png +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/icon/apple-touch-icon.png +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/icon/favicon-16x16.png +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/icon/favicon-32x32.png +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/icon/favicon.ico +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/icon/site.webmanifest +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/index.html +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/quasar.min.css +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/quasar.min.js +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/vue-main.js +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/tests/__init__.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/tests/demo.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/tests/service/__init__.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/tests/service/schema.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/tests/test_analysis.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/tests/test_import.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/tests/test_module.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/tests/test_type_alias.py +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/uv.lock +0 -0
- {fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/voyager.jpg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastapi-voyager
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.3
|
|
4
4
|
Summary: Visualize FastAPI application's routing tree and dependencies
|
|
5
5
|
Project-URL: Homepage, https://github.com/allmonday/fastapi-voyager
|
|
6
6
|
Project-URL: Source, https://github.com/allmonday/fastapi-voyager
|
|
@@ -112,7 +112,6 @@ class Analytics:
|
|
|
112
112
|
# add response_models and create links from route -> response_model
|
|
113
113
|
for schema in get_core_types(route.response_model):
|
|
114
114
|
if schema and issubclass(schema, BaseModel):
|
|
115
|
-
update_forward_refs(schema)
|
|
116
115
|
target_name = full_class_name(schema)
|
|
117
116
|
self.links.append(Link(
|
|
118
117
|
source=route_id,
|
|
@@ -182,6 +181,7 @@ class Analytics:
|
|
|
182
181
|
3. recursively run walk_schema
|
|
183
182
|
"""
|
|
184
183
|
|
|
184
|
+
update_forward_refs(schema)
|
|
185
185
|
self.add_to_node_set(schema)
|
|
186
186
|
|
|
187
187
|
# handle schema inside ensure_subset(schema)
|
|
@@ -4,6 +4,7 @@ from pydantic import BaseModel
|
|
|
4
4
|
from typing import get_origin, get_args, Union, Annotated, Any, Type
|
|
5
5
|
from fastapi_voyager.type import FieldInfo
|
|
6
6
|
from types import UnionType
|
|
7
|
+
import pydantic_resolve.constant as const
|
|
7
8
|
|
|
8
9
|
# Python <3.12 compatibility: TypeAliasType exists only from 3.12 (PEP 695)
|
|
9
10
|
try: # pragma: no cover - import guard
|
|
@@ -149,8 +150,9 @@ def get_type_name(anno):
|
|
|
149
150
|
|
|
150
151
|
return name_of(anno)
|
|
151
152
|
|
|
153
|
+
|
|
152
154
|
def is_inheritance_of_pydantic_base(cls):
|
|
153
|
-
|
|
155
|
+
return issubclass(cls, BaseModel) and cls is not BaseModel
|
|
154
156
|
|
|
155
157
|
|
|
156
158
|
def get_bases_fields(schemas: list[type[BaseModel]]) -> set[str]:
|
|
@@ -240,15 +242,30 @@ def safe_issubclass(kls, classinfo):
|
|
|
240
242
|
|
|
241
243
|
|
|
242
244
|
def update_forward_refs(kls):
|
|
243
|
-
def update_pydantic_forward_refs(
|
|
245
|
+
def update_pydantic_forward_refs(kls2: Type[BaseModel]):
|
|
244
246
|
"""
|
|
245
247
|
recursively update refs.
|
|
246
248
|
"""
|
|
247
|
-
|
|
248
|
-
|
|
249
|
+
|
|
250
|
+
kls2.model_rebuild()
|
|
251
|
+
setattr(kls2, const.PYDANTIC_FORWARD_REF_UPDATED, True)
|
|
252
|
+
|
|
253
|
+
values = kls2.model_fields.values()
|
|
249
254
|
for field in values:
|
|
250
255
|
update_forward_refs(field.annotation)
|
|
251
256
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
257
|
+
if safe_issubclass(kls, BaseModel):
|
|
258
|
+
kls.model_rebuild()
|
|
259
|
+
setattr(kls, const.PYDANTIC_FORWARD_REF_UPDATED, True)
|
|
260
|
+
|
|
261
|
+
for shelled_type in get_core_types(kls):
|
|
262
|
+
if getattr(shelled_type, const.PYDANTIC_FORWARD_REF_UPDATED, False):
|
|
263
|
+
continue
|
|
264
|
+
if safe_issubclass(shelled_type, BaseModel):
|
|
265
|
+
update_pydantic_forward_refs(shelled_type)
|
|
266
|
+
|
|
267
|
+
if __name__ == "__main__":
|
|
268
|
+
from tests.demo_anno import PageSprint, PageOverall
|
|
269
|
+
|
|
270
|
+
update_forward_refs(PageOverall)
|
|
271
|
+
update_forward_refs(PageSprint)
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
__all__ = ["__version__"]
|
|
2
|
-
__version__ = "0.4.
|
|
2
|
+
__version__ = "0.4.3"
|
|
@@ -12,6 +12,11 @@ app = FastAPI(title="Demo API", description="A demo FastAPI application for rout
|
|
|
12
12
|
def get_sprint():
|
|
13
13
|
return []
|
|
14
14
|
|
|
15
|
+
class Tree(BaseModel):
|
|
16
|
+
id: int
|
|
17
|
+
name: str
|
|
18
|
+
children: list[Tree] = []
|
|
19
|
+
|
|
15
20
|
class PageMember(serv.Member):
|
|
16
21
|
fullname: str = ''
|
|
17
22
|
def post_fullname(self):
|
|
@@ -51,6 +56,8 @@ class PageStory(BaseModel):
|
|
|
51
56
|
owner: Optional[PageMember] = None
|
|
52
57
|
union_tasks: list[TaskUnion] = []
|
|
53
58
|
|
|
59
|
+
tree: Optional[Tree] = None
|
|
60
|
+
|
|
54
61
|
@app.get("/page_overall", tags=['for-page'], response_model=PageOverall)
|
|
55
62
|
async def get_page_info():
|
|
56
63
|
page_overall = PageOverall(sprints=[]) # focus on schema only
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/icon/apple-touch-icon.png
RENAMED
|
File without changes
|
{fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/icon/favicon-16x16.png
RENAMED
|
File without changes
|
{fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/icon/favicon-32x32.png
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_voyager-0.4.2 → fastapi_voyager-0.4.3}/src/fastapi_voyager/web/icon/site.webmanifest
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|