fastapi-voyager 0.15.5__py3-none-any.whl → 0.16.0a1__py3-none-any.whl
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/__init__.py +2 -2
- fastapi_voyager/adapters/__init__.py +16 -0
- fastapi_voyager/adapters/base.py +44 -0
- fastapi_voyager/adapters/common.py +260 -0
- fastapi_voyager/adapters/django_ninja_adapter.py +299 -0
- fastapi_voyager/adapters/fastapi_adapter.py +165 -0
- fastapi_voyager/adapters/litestar_adapter.py +188 -0
- fastapi_voyager/er_diagram.py +15 -14
- fastapi_voyager/introspectors/__init__.py +34 -0
- fastapi_voyager/introspectors/base.py +81 -0
- fastapi_voyager/introspectors/detector.py +123 -0
- fastapi_voyager/introspectors/django_ninja.py +114 -0
- fastapi_voyager/introspectors/fastapi.py +83 -0
- fastapi_voyager/introspectors/litestar.py +166 -0
- fastapi_voyager/pydantic_resolve_util.py +4 -2
- fastapi_voyager/render.py +2 -2
- fastapi_voyager/render_style.py +0 -1
- fastapi_voyager/server.py +174 -295
- fastapi_voyager/type_helper.py +2 -2
- fastapi_voyager/version.py +1 -1
- fastapi_voyager/voyager.py +75 -47
- fastapi_voyager/web/graph-ui.js +102 -69
- fastapi_voyager/web/graphviz.svg.js +79 -30
- fastapi_voyager/web/index.html +11 -14
- fastapi_voyager/web/store.js +2 -0
- fastapi_voyager/web/vue-main.js +4 -0
- {fastapi_voyager-0.15.5.dist-info → fastapi_voyager-0.16.0a1.dist-info}/METADATA +133 -7
- {fastapi_voyager-0.15.5.dist-info → fastapi_voyager-0.16.0a1.dist-info}/RECORD +31 -19
- {fastapi_voyager-0.15.5.dist-info → fastapi_voyager-0.16.0a1.dist-info}/WHEEL +0 -0
- {fastapi_voyager-0.15.5.dist-info → fastapi_voyager-0.16.0a1.dist-info}/entry_points.txt +0 -0
- {fastapi_voyager-0.15.5.dist-info → fastapi_voyager-0.16.0a1.dist-info}/licenses/LICENSE +0 -0
fastapi_voyager/web/vue-main.js
CHANGED
|
@@ -291,6 +291,10 @@ const app = createApp({
|
|
|
291
291
|
onMounted(async () => {
|
|
292
292
|
document.body.classList.remove("app-loading")
|
|
293
293
|
await loadInitial()
|
|
294
|
+
// Update document title after framework_name is loaded
|
|
295
|
+
if (store.state.framework_name) {
|
|
296
|
+
document.title = `${store.state.framework_name} Voyager`
|
|
297
|
+
}
|
|
294
298
|
// Reveal app content only after initial JS/data is ready
|
|
295
299
|
})
|
|
296
300
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fastapi-voyager
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.0a1
|
|
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
|
|
@@ -18,11 +18,15 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.13
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.14
|
|
20
20
|
Requires-Python: >=3.10
|
|
21
|
-
Requires-Dist: fastapi>=0.110
|
|
22
21
|
Requires-Dist: jinja2>=3.0.0
|
|
23
22
|
Requires-Dist: pydantic-resolve>=2.4.3
|
|
24
23
|
Provides-Extra: dev
|
|
24
|
+
Requires-Dist: django-ninja; extra == 'dev'
|
|
25
|
+
Requires-Dist: fastapi>=0.110; extra == 'dev'
|
|
26
|
+
Requires-Dist: httpx; extra == 'dev'
|
|
27
|
+
Requires-Dist: litestar; extra == 'dev'
|
|
25
28
|
Requires-Dist: pytest; extra == 'dev'
|
|
29
|
+
Requires-Dist: pytest-asyncio; extra == 'dev'
|
|
26
30
|
Requires-Dist: ruff; extra == 'dev'
|
|
27
31
|
Requires-Dist: uvicorn; extra == 'dev'
|
|
28
32
|
Description-Content-Type: text/markdown
|
|
@@ -34,10 +38,12 @@ Description-Content-Type: text/markdown
|
|
|
34
38
|
|
|
35
39
|
# FastAPI Voyager
|
|
36
40
|
|
|
37
|
-
Visualize your
|
|
41
|
+
Visualize your API endpoints and explore them interactively.
|
|
38
42
|
|
|
39
43
|
Its vision is to make code easier to read and understand, serving as an ideal documentation tool.
|
|
40
44
|
|
|
45
|
+
**Now supports multiple frameworks:** FastAPI, Django Ninja, and Litestar.
|
|
46
|
+
|
|
41
47
|
> This repo is still in early stage, it supports Pydantic v2 only.
|
|
42
48
|
|
|
43
49
|
- **Live Demo**: https://www.newsyeah.fun/voyager/
|
|
@@ -49,6 +55,7 @@ Its vision is to make code easier to read and understand, serving as an ideal do
|
|
|
49
55
|
|
|
50
56
|
- [Quick Start](#quick-start)
|
|
51
57
|
- [Installation](#installation)
|
|
58
|
+
- [Supported Frameworks](#supported-frameworks)
|
|
52
59
|
- [Features](#features)
|
|
53
60
|
- [Command Line Usage](#command-line-usage)
|
|
54
61
|
- [About pydantic-resolve](#about-pydantic-resolve)
|
|
@@ -58,7 +65,7 @@ Its vision is to make code easier to read and understand, serving as an ideal do
|
|
|
58
65
|
|
|
59
66
|
## Quick Start
|
|
60
67
|
|
|
61
|
-
With simple configuration, fastapi-voyager can be embedded into
|
|
68
|
+
With simple configuration, fastapi-voyager can be embedded into your web application:
|
|
62
69
|
|
|
63
70
|
```python
|
|
64
71
|
from fastapi import FastAPI
|
|
@@ -66,6 +73,8 @@ from fastapi_voyager import create_voyager
|
|
|
66
73
|
|
|
67
74
|
app = FastAPI()
|
|
68
75
|
|
|
76
|
+
# ... define your routes ...
|
|
77
|
+
|
|
69
78
|
app.mount('/voyager',
|
|
70
79
|
create_voyager(
|
|
71
80
|
app,
|
|
@@ -74,12 +83,14 @@ app.mount('/voyager',
|
|
|
74
83
|
swagger_url="/docs",
|
|
75
84
|
ga_id="G-XXXXXXXXVL",
|
|
76
85
|
initial_page_policy='first',
|
|
77
|
-
online_repo_url='https://github.com/
|
|
86
|
+
online_repo_url='https://github.com/your-org/your-repo/blob/master',
|
|
78
87
|
enable_pydantic_resolve_meta=True))
|
|
79
88
|
```
|
|
80
89
|
|
|
81
90
|
Visit `http://localhost:8000/voyager` to explore your API visually.
|
|
82
91
|
|
|
92
|
+
For framework-specific examples (Django Ninja, Litestar), see [Supported Frameworks](#supported-frameworks).
|
|
93
|
+
|
|
83
94
|
[View full example](https://github.com/allmonday/composition-oriented-development-pattern/blob/master/src/main.py#L48)
|
|
84
95
|
|
|
85
96
|
## Installation
|
|
@@ -110,9 +121,106 @@ voyager -m path.to.your.app.module --server --app api
|
|
|
110
121
|
|
|
111
122
|
> **Note**: [Sub-Application mounts](https://fastapi.tiangolo.com/advanced/sub-applications/) are not supported yet, but you can specify the name of the FastAPI application with `--app`. Only a single application (default: `app`) can be selected.
|
|
112
123
|
|
|
124
|
+
## Supported Frameworks
|
|
125
|
+
|
|
126
|
+
fastapi-voyager automatically detects your framework and provides the appropriate integration. Currently supported frameworks:
|
|
127
|
+
|
|
128
|
+
### FastAPI
|
|
129
|
+
|
|
130
|
+
```python
|
|
131
|
+
from fastapi import FastAPI
|
|
132
|
+
from fastapi_voyager import create_voyager
|
|
133
|
+
|
|
134
|
+
app = FastAPI()
|
|
135
|
+
|
|
136
|
+
@app.get("/hello")
|
|
137
|
+
def hello():
|
|
138
|
+
return {"message": "Hello World"}
|
|
139
|
+
|
|
140
|
+
# Mount voyager
|
|
141
|
+
app.mount("/voyager", create_voyager(app))
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Start with:
|
|
145
|
+
```bash
|
|
146
|
+
uvicorn your_app:app --reload
|
|
147
|
+
# Visit http://localhost:8000/voyager
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Django Ninja
|
|
151
|
+
|
|
152
|
+
```python
|
|
153
|
+
import os
|
|
154
|
+
import django
|
|
155
|
+
from django.core.asgi import get_asgi_application
|
|
156
|
+
from ninja import NinjaAPI
|
|
157
|
+
from fastapi_voyager import create_voyager
|
|
158
|
+
|
|
159
|
+
# Configure Django
|
|
160
|
+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
|
|
161
|
+
django.setup()
|
|
162
|
+
|
|
163
|
+
# Create Django Ninja API
|
|
164
|
+
api = NinjaAPI()
|
|
165
|
+
|
|
166
|
+
@api.get("/hello")
|
|
167
|
+
def hello(request):
|
|
168
|
+
return {"message": "Hello World"}
|
|
169
|
+
|
|
170
|
+
# Create voyager ASGI app
|
|
171
|
+
voyager_app = create_voyager(api)
|
|
172
|
+
|
|
173
|
+
# Create ASGI application that routes between Django and voyager
|
|
174
|
+
async def application(scope, receive, send):
|
|
175
|
+
if scope["type"] == "http" and scope["path"].startswith("/voyager"):
|
|
176
|
+
await voyager_app(scope, receive, send)
|
|
177
|
+
else:
|
|
178
|
+
django_app = get_asgi_application()
|
|
179
|
+
await django_app(scope, receive, send)
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Start with:
|
|
183
|
+
```bash
|
|
184
|
+
uvicorn your_app:application --reload
|
|
185
|
+
# Visit http://localhost:8000/voyager
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Litestar
|
|
189
|
+
|
|
190
|
+
```python
|
|
191
|
+
from litestar import Litestar, get
|
|
192
|
+
from fastapi_voyager import create_voyager
|
|
193
|
+
|
|
194
|
+
# Create Litestar app
|
|
195
|
+
app = Litestar()
|
|
196
|
+
|
|
197
|
+
@get("/hello")
|
|
198
|
+
def hello() -> dict:
|
|
199
|
+
return {"message": "Hello World"}
|
|
200
|
+
|
|
201
|
+
# Create voyager app (returns a Litestar app)
|
|
202
|
+
voyager_app = create_voyager(app)
|
|
203
|
+
|
|
204
|
+
# Create ASGI application that routes between main app and voyager
|
|
205
|
+
async def asgi_app(scope, receive, send):
|
|
206
|
+
if scope["type"] == "http" and scope["path"].startswith("/voyager"):
|
|
207
|
+
# Remove /voyager prefix for voyager app
|
|
208
|
+
new_scope = dict(scope)
|
|
209
|
+
new_scope["path"] = scope["path"][8:] or "/"
|
|
210
|
+
await voyager_app(new_scope, receive, send)
|
|
211
|
+
else:
|
|
212
|
+
await app(scope, receive, send)
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Start with:
|
|
216
|
+
```bash
|
|
217
|
+
uvicorn your_app:asgi_app --reload
|
|
218
|
+
# Visit http://localhost:8000/voyager
|
|
219
|
+
```
|
|
220
|
+
|
|
113
221
|
## Features
|
|
114
222
|
|
|
115
|
-
fastapi-voyager is designed for scenarios using
|
|
223
|
+
fastapi-voyager is designed for scenarios using web frameworks with Pydantic models (FastAPI, Django Ninja, Litestar). It helps visualize dependencies and serves as an architecture tool to identify implementation issues such as wrong relationships, overfetching, and more.
|
|
116
224
|
|
|
117
225
|
**Best Practice**: When building view models following the ER model pattern, fastapi-voyager can fully realize its potential - quickly identifying which APIs use specific entities and vice versa.
|
|
118
226
|
|
|
@@ -258,6 +366,21 @@ uv pip install ".[dev]"
|
|
|
258
366
|
uvicorn tests.programatic:app --reload
|
|
259
367
|
```
|
|
260
368
|
|
|
369
|
+
### Test Different Frameworks
|
|
370
|
+
|
|
371
|
+
You can test the framework-specific examples:
|
|
372
|
+
|
|
373
|
+
```bash
|
|
374
|
+
# FastAPI example
|
|
375
|
+
uvicorn tests.fastapi.embedding:app --reload
|
|
376
|
+
|
|
377
|
+
# Django Ninja example
|
|
378
|
+
uvicorn tests.django_ninja.embedding:app --reload
|
|
379
|
+
|
|
380
|
+
# Litestar example
|
|
381
|
+
uvicorn tests.litestar.embedding:asgi_app --reload
|
|
382
|
+
```
|
|
383
|
+
|
|
261
384
|
Visit `http://localhost:8000/voyager` to see changes.
|
|
262
385
|
|
|
263
386
|
### Setup Git Hooks (Optional)
|
|
@@ -289,9 +412,12 @@ This will run Prettier automatically before each commit. See [`.githooks/README.
|
|
|
289
412
|
|
|
290
413
|
## Dependencies
|
|
291
414
|
|
|
292
|
-
- [FastAPI](https://fastapi.tiangolo.com/)
|
|
293
415
|
- [pydantic-resolve](https://github.com/allmonday/pydantic-resolve)
|
|
294
416
|
- [Quasar Framework](https://quasar.dev/)
|
|
417
|
+
### Dev dependencies
|
|
418
|
+
- [FastAPI](https://fastapi.tiangolo.com/)
|
|
419
|
+
- [Django Ninja](https://django-ninja.rest-framework.com/)
|
|
420
|
+
- [Litestar](https://litestar.dev/)
|
|
295
421
|
|
|
296
422
|
## Credits
|
|
297
423
|
|
|
@@ -1,16 +1,28 @@
|
|
|
1
|
-
fastapi_voyager/__init__.py,sha256=
|
|
1
|
+
fastapi_voyager/__init__.py,sha256=1IdDy6JUMgQqQo33qUe2znX9YeI7S35pjVrbt0QLOzY,228
|
|
2
2
|
fastapi_voyager/cli.py,sha256=td3yIIigEomhSdDO-Xkh-CgpEwCafwlwnpvxnT9QsBo,10488
|
|
3
|
-
fastapi_voyager/er_diagram.py,sha256=
|
|
3
|
+
fastapi_voyager/er_diagram.py,sha256=4Ba5u-T7XmVmk9MltVMe-m-18mUAHMTybTdE-zNZLrU,7860
|
|
4
4
|
fastapi_voyager/filter.py,sha256=AN_HIu8-DtKisIq5mFt7CnqRHtxKewedNGyyaI82hSY,11529
|
|
5
5
|
fastapi_voyager/module.py,sha256=h9YR3BpS-CAcJW9WCdVkF4opqwY32w9T67g9GfdLytk,3425
|
|
6
|
-
fastapi_voyager/pydantic_resolve_util.py,sha256=
|
|
7
|
-
fastapi_voyager/render.py,sha256=
|
|
8
|
-
fastapi_voyager/render_style.py,sha256=
|
|
9
|
-
fastapi_voyager/server.py,sha256=
|
|
6
|
+
fastapi_voyager/pydantic_resolve_util.py,sha256=0UfAp6Yi6FNpsI1bUu89hRVWFy6keBu1KtcZl-6NYso,3526
|
|
7
|
+
fastapi_voyager/render.py,sha256=A1jFDraQFOfnFHguYlsvBbGIDJ527VQH0jZ-xgTjqIk,17270
|
|
8
|
+
fastapi_voyager/render_style.py,sha256=1y3aRhBSJSWU-JuSgjn9il_xFEqjv6mJCoUzImLQT6M,2525
|
|
9
|
+
fastapi_voyager/server.py,sha256=sgUUscbt736VNB6CN2J_6rJ6fpWO4vJFW7oP7FmAjvA,6739
|
|
10
10
|
fastapi_voyager/type.py,sha256=zluWvh5vpnjXJ9aAmyNJTSmXZPjAHCvgRT5oQRAjHrg,2104
|
|
11
|
-
fastapi_voyager/type_helper.py,sha256=
|
|
12
|
-
fastapi_voyager/version.py,sha256=
|
|
13
|
-
fastapi_voyager/voyager.py,sha256=
|
|
11
|
+
fastapi_voyager/type_helper.py,sha256=5HYUHdghTISZ44NvVsrMWlRGD5C9-xrGeNKuLYDMA6s,10209
|
|
12
|
+
fastapi_voyager/version.py,sha256=0KZ1gUzWpAnbQTYDMdcLc-qEsyVlYlG265SEa7S4Ij4,56
|
|
13
|
+
fastapi_voyager/voyager.py,sha256=S0cCMLFv_wPfEMVdp4cYqbc-Y207SjCTSmsYdqzIDHg,15307
|
|
14
|
+
fastapi_voyager/adapters/__init__.py,sha256=a95rBvV4QVcX_yAzjuJQKOW-EbJ79R--YjUJ3BGkC3k,517
|
|
15
|
+
fastapi_voyager/adapters/base.py,sha256=m-E74LlNgYCpj-gqfYsKl2mzWW5iFiaDTjiBri_5cfo,1283
|
|
16
|
+
fastapi_voyager/adapters/common.py,sha256=DXVLsjLn65U3RR7YyKL_ELV74mnINWmZ4hQ6zISdV0E,9684
|
|
17
|
+
fastapi_voyager/adapters/django_ninja_adapter.py,sha256=tl1rMcotAhOwBxT8poG8rTXm1v3wn_cpaoda79NEFxE,11424
|
|
18
|
+
fastapi_voyager/adapters/fastapi_adapter.py,sha256=-VvCXdMRsV_zZzEkplOGK8HjQ9ICoTyapG3ZluQ1Nvk,5870
|
|
19
|
+
fastapi_voyager/adapters/litestar_adapter.py,sha256=-ILD8jIb82_JKV87p4IfV9IXvhUJ6RSic6i_iHapo5w,6812
|
|
20
|
+
fastapi_voyager/introspectors/__init__.py,sha256=HbmoUyM-BSwd4Rg2ptd9u-qvZSD3UykKyHYVoRg03OM,917
|
|
21
|
+
fastapi_voyager/introspectors/base.py,sha256=hMfka9gVXr-E8MA1rKSSmYk0OppqgiFPWavfgAkPmQI,2131
|
|
22
|
+
fastapi_voyager/introspectors/detector.py,sha256=rmlpQARJMrFXPty6OUdjmFRTtBYErGDH4l7Tivnu_FQ,3910
|
|
23
|
+
fastapi_voyager/introspectors/django_ninja.py,sha256=Ytneh_kpsakTo_Njv1e4nvqfErjT1PrYelLZ-8xX5Gg,4052
|
|
24
|
+
fastapi_voyager/introspectors/fastapi.py,sha256=SyWGKAH8cM3CENY-Uu3YY6e8kFM5BE-jEBBZLoIF--A,2696
|
|
25
|
+
fastapi_voyager/introspectors/litestar.py,sha256=QXnaT0-hCa_0sByKJoUWuu0vIzRpCCKLokCBDTtv_s4,6100
|
|
14
26
|
fastapi_voyager/templates/dot/cluster.j2,sha256=I2z9KkfCzmAtqXe0gXBnxnOfBXUSpdlATs3uf-O8_B8,307
|
|
15
27
|
fastapi_voyager/templates/dot/cluster_container.j2,sha256=2tH1mOJvPoVKE_aHVMR3t06TfH_dYa9OeH6DBqSHt_A,204
|
|
16
28
|
fastapi_voyager/templates/dot/digraph.j2,sha256=wZuiO-vvZ-AJ1FcMQG4BLevUyxk6yA-yEpUa3Us05mE,435
|
|
@@ -24,14 +36,14 @@ fastapi_voyager/templates/html/pydantic_meta.j2,sha256=_tsSqjucs_QrAlPIVRy9u6I2-
|
|
|
24
36
|
fastapi_voyager/templates/html/schema_field_row.j2,sha256=KfKexHO_QJV-OIJS0eiY_7fqA8031fWpD2g2wTv4BuE,111
|
|
25
37
|
fastapi_voyager/templates/html/schema_header.j2,sha256=9WpuHLy3Zbv5GHG08qqaj5Xf-gaR-79ErBYuANZp7iA,179
|
|
26
38
|
fastapi_voyager/templates/html/schema_table.j2,sha256=rzphiGk1il7uv4Gr2p_HLPHqyLZk63vLrGAmIduTdSE,117
|
|
27
|
-
fastapi_voyager/web/graph-ui.js,sha256=
|
|
39
|
+
fastapi_voyager/web/graph-ui.js,sha256=9b2auyGWEpUcF65YV231GNojQ9Uk6FsT1SlRR3lSYnc,7664
|
|
28
40
|
fastapi_voyager/web/graphviz.svg.css,sha256=K218ov_mdSe3ga4KwhiBB92ynVvm5zaAk9_D9a3d8hE,1546
|
|
29
|
-
fastapi_voyager/web/graphviz.svg.js,sha256=
|
|
30
|
-
fastapi_voyager/web/index.html,sha256=
|
|
41
|
+
fastapi_voyager/web/graphviz.svg.js,sha256=VokgCghvP4zm3SFiFVPIikdW6XzjkZJXQkBbCrEitug,19885
|
|
42
|
+
fastapi_voyager/web/index.html,sha256=4HGVavdd15u_BA7BwC-RJEeKal6hcYbiQaLcoOANQHI,23485
|
|
31
43
|
fastapi_voyager/web/quasar.min.css,sha256=F5jQe7X2XT54VlvAaa2V3GsBFdVD-vxDZeaPLf6U9CU,203145
|
|
32
44
|
fastapi_voyager/web/quasar.min.js,sha256=h0ftyPMW_CRiyzeVfQqiup0vrVt4_QWojpqmpnpn07E,502974
|
|
33
|
-
fastapi_voyager/web/store.js,sha256=
|
|
34
|
-
fastapi_voyager/web/vue-main.js,sha256=
|
|
45
|
+
fastapi_voyager/web/store.js,sha256=CKQz5tZtv6W70TDVqeQiOt2gUXzD0WIc0ufCa0dB8sU,15193
|
|
46
|
+
fastapi_voyager/web/vue-main.js,sha256=MedNrfgy2KJCFiyv8sczC8d8M2yytZDX58PQGvjUYdM,10825
|
|
35
47
|
fastapi_voyager/web/component/demo.js,sha256=sAklFGhKGmMy9-ofgOw2oPIidAoIOgHu6yvV51L_MAA,350
|
|
36
48
|
fastapi_voyager/web/component/render-graph.js,sha256=9wnO70n3eyPKTpa744idgs5PSwgvzbfv4InZ68eEOKs,2454
|
|
37
49
|
fastapi_voyager/web/component/route-code-display.js,sha256=a823nBz3EEjutW2pfi73rcF3hodCBmgYNmuZi94sXE4,3615
|
|
@@ -43,8 +55,8 @@ fastapi_voyager/web/icon/favicon-16x16.png,sha256=JC07jEzfIYxBIoQn_FHXvyHuxESdhW
|
|
|
43
55
|
fastapi_voyager/web/icon/favicon-32x32.png,sha256=C7v1h58cfWOsiLp9yOIZtlx-dLasBcq3NqpHVGRmpt4,1859
|
|
44
56
|
fastapi_voyager/web/icon/favicon.ico,sha256=tZolYIXkkBcFiYl1A8ksaXN2VjGamzcSdes838dLvNc,15406
|
|
45
57
|
fastapi_voyager/web/icon/site.webmanifest,sha256=GRozZ5suTykYcPMap1QhjrAB8PLW0mbT_phhzw_utvQ,316
|
|
46
|
-
fastapi_voyager-0.
|
|
47
|
-
fastapi_voyager-0.
|
|
48
|
-
fastapi_voyager-0.
|
|
49
|
-
fastapi_voyager-0.
|
|
50
|
-
fastapi_voyager-0.
|
|
58
|
+
fastapi_voyager-0.16.0a1.dist-info/METADATA,sha256=pGOq7n96lV1BKAXvCKPXUU8BvXN89HzgAMI90dmnH_Y,12943
|
|
59
|
+
fastapi_voyager-0.16.0a1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
60
|
+
fastapi_voyager-0.16.0a1.dist-info/entry_points.txt,sha256=pEIKoUnIDXEtdMBq8EmXm70m16vELIu1VPz9-TBUFWM,53
|
|
61
|
+
fastapi_voyager-0.16.0a1.dist-info/licenses/LICENSE,sha256=lNVRR3y_bFVoFKuK2JM8N4sFaj3m-7j29kvL3olFi5Y,1067
|
|
62
|
+
fastapi_voyager-0.16.0a1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|