fastapi-voyager 0.6.1__tar.gz → 0.6.2__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.6.1 → fastapi_voyager-0.6.2}/PKG-INFO +8 -8
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/README.md +7 -7
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/type_helper.py +23 -2
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/version.py +1 -1
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/tests/demo.py +3 -1
- fastapi_voyager-0.6.2/tests/test_generic.py +20 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/.gitignore +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/.python-version +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/LICENSE +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/pyproject.toml +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/__init__.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/cli.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/filter.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/module.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/render.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/server.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/type.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/voyager.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/component/render-graph.js +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/component/route-code-display.js +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/component/schema-code-display.js +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/component/schema-field-filter.js +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/graph-ui.js +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/graphviz.svg.css +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/graphviz.svg.js +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/icon/android-chrome-192x192.png +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/icon/android-chrome-512x512.png +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/icon/apple-touch-icon.png +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/icon/favicon-16x16.png +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/icon/favicon-32x32.png +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/icon/favicon.ico +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/icon/site.webmanifest +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/index.html +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/quasar.min.css +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/quasar.min.js +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/vue-main.js +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/tests/__init__.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/tests/demo_anno.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/tests/programatic.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/tests/service/__init__.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/tests/service/schema.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/tests/test_analysis.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/tests/test_import.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/tests/test_module.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/tests/test_type_helper.py +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/uv.lock +0 -0
- {fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/voyager.jpg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastapi-voyager
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
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
|
|
@@ -183,13 +183,7 @@ features
|
|
|
183
183
|
- [ ] abstract render module
|
|
184
184
|
- [ ] export voyager core data into json (for better debugging)
|
|
185
185
|
- [ ] add api to rebuild core data from json, and render it
|
|
186
|
-
- [
|
|
187
|
-
|
|
188
|
-
```python
|
|
189
|
-
class Paged(BaseModel, Generic[T]):
|
|
190
|
-
total: int
|
|
191
|
-
items: List[T]
|
|
192
|
-
```
|
|
186
|
+
- [x] fix Generic case `test_generic.py`
|
|
193
187
|
|
|
194
188
|
bugs:
|
|
195
189
|
- [ ] fix duplicated link from class and parent class, it also break clicking highlight
|
|
@@ -205,3 +199,9 @@ TODO: ...
|
|
|
205
199
|
|
|
206
200
|
- https://apis.guru/graphql-voyager/, for inspiration.
|
|
207
201
|
- https://github.com/tintinweb/vscode-interactive-graphviz, for web visualization.
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
## Changelog
|
|
205
|
+
|
|
206
|
+
- 0.6.2:
|
|
207
|
+
- fix generic related issue
|
|
@@ -156,13 +156,7 @@ features
|
|
|
156
156
|
- [ ] abstract render module
|
|
157
157
|
- [ ] export voyager core data into json (for better debugging)
|
|
158
158
|
- [ ] add api to rebuild core data from json, and render it
|
|
159
|
-
- [
|
|
160
|
-
|
|
161
|
-
```python
|
|
162
|
-
class Paged(BaseModel, Generic[T]):
|
|
163
|
-
total: int
|
|
164
|
-
items: List[T]
|
|
165
|
-
```
|
|
159
|
+
- [x] fix Generic case `test_generic.py`
|
|
166
160
|
|
|
167
161
|
bugs:
|
|
168
162
|
- [ ] fix duplicated link from class and parent class, it also break clicking highlight
|
|
@@ -178,3 +172,9 @@ TODO: ...
|
|
|
178
172
|
|
|
179
173
|
- https://apis.guru/graphql-voyager/, for inspiration.
|
|
180
174
|
- https://github.com/tintinweb/vscode-interactive-graphviz, for web visualization.
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
## Changelog
|
|
178
|
+
|
|
179
|
+
- 0.6.2:
|
|
180
|
+
- fix generic related issue
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import inspect
|
|
2
2
|
import os
|
|
3
3
|
from pydantic import BaseModel
|
|
4
|
-
from typing import get_origin, get_args, Union, Annotated, Any, Type
|
|
4
|
+
from typing import get_origin, get_args, Union, Annotated, Any, Type, Generic
|
|
5
5
|
from fastapi_voyager.type import FieldInfo
|
|
6
6
|
from types import UnionType
|
|
7
7
|
import pydantic_resolve.constant as const
|
|
@@ -142,7 +142,7 @@ def get_type_name(anno):
|
|
|
142
142
|
|
|
143
143
|
|
|
144
144
|
def is_inheritance_of_pydantic_base(cls):
|
|
145
|
-
return safe_issubclass(cls, BaseModel) and cls is not BaseModel
|
|
145
|
+
return safe_issubclass(cls, BaseModel) and cls is not BaseModel and not is_generic_container(cls)
|
|
146
146
|
|
|
147
147
|
|
|
148
148
|
def get_bases_fields(schemas: list[type[BaseModel]]) -> set[str]:
|
|
@@ -256,6 +256,27 @@ def update_forward_refs(kls):
|
|
|
256
256
|
if safe_issubclass(shelled_type, BaseModel):
|
|
257
257
|
update_pydantic_forward_refs(shelled_type)
|
|
258
258
|
|
|
259
|
+
|
|
260
|
+
def is_generic_container(cls):
|
|
261
|
+
"""
|
|
262
|
+
T = TypeVar('T')
|
|
263
|
+
class DataModel(BaseModel, Generic[T]):
|
|
264
|
+
data: T
|
|
265
|
+
id: int
|
|
266
|
+
|
|
267
|
+
type DataModelPageStory = DataModel[PageStory]
|
|
268
|
+
|
|
269
|
+
is_generic_container(DataModel) -> True
|
|
270
|
+
is_generic_container(DataModel[PageStory]) -> False
|
|
271
|
+
|
|
272
|
+
DataModel.__parameters__ == (T,)
|
|
273
|
+
DataModelPageStory.__parameters__ == (,)
|
|
274
|
+
"""
|
|
275
|
+
try:
|
|
276
|
+
return (hasattr(cls, '__bases__') and Generic in cls.__bases__ and (hasattr(cls, '__parameters__') and bool(cls.__parameters__)))
|
|
277
|
+
except (TypeError, AttributeError):
|
|
278
|
+
return False
|
|
279
|
+
|
|
259
280
|
if __name__ == "__main__":
|
|
260
281
|
from tests.demo_anno import PageSprint, PageOverall
|
|
261
282
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
__all__ = ["__version__"]
|
|
2
|
-
__version__ = "0.6.
|
|
2
|
+
__version__ = "0.6.2"
|
|
@@ -69,6 +69,8 @@ class DataModel(BaseModel, Generic[T]):
|
|
|
69
69
|
data: T
|
|
70
70
|
id: int
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
type DataModelPageStory = DataModel[PageStory]
|
|
73
|
+
|
|
74
|
+
@app.get("/page_test_1/", tags=['for-page'], response_model=DataModelPageStory)
|
|
73
75
|
def get_page_test_1():
|
|
74
76
|
return {} # no implementation
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from pydantic import BaseModel
|
|
2
|
+
from typing import Generic, TypeVar
|
|
3
|
+
from fastapi_voyager.type_helper import is_generic_container
|
|
4
|
+
|
|
5
|
+
class PageStory(BaseModel):
|
|
6
|
+
id: int
|
|
7
|
+
title: str
|
|
8
|
+
|
|
9
|
+
T = TypeVar('T')
|
|
10
|
+
class DataModel(BaseModel, Generic[T]):
|
|
11
|
+
data: T
|
|
12
|
+
id: int
|
|
13
|
+
|
|
14
|
+
type DataModelPageStory = DataModel[PageStory]
|
|
15
|
+
|
|
16
|
+
def test_is_generic_container():
|
|
17
|
+
print(DataModelPageStory.__value__.__bases__)
|
|
18
|
+
print(DataModelPageStory.__value__.model_fields.items())
|
|
19
|
+
assert is_generic_container(DataModel) is True
|
|
20
|
+
assert is_generic_container(DataModelPageStory) is False
|
|
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.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/component/render-graph.js
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
|
{fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/icon/apple-touch-icon.png
RENAMED
|
File without changes
|
{fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/icon/favicon-16x16.png
RENAMED
|
File without changes
|
{fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/src/fastapi_voyager/web/icon/favicon-32x32.png
RENAMED
|
File without changes
|
|
File without changes
|
{fastapi_voyager-0.6.1 → fastapi_voyager-0.6.2}/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
|
|
File without changes
|