fastapi-voyager 0.4.1__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 +5 -0
- fastapi_voyager/cli.py +289 -0
- fastapi_voyager/filter.py +105 -0
- fastapi_voyager/graph.py +396 -0
- fastapi_voyager/module.py +44 -0
- fastapi_voyager/server.py +107 -0
- fastapi_voyager/type.py +48 -0
- fastapi_voyager/type_helper.py +232 -0
- fastapi_voyager/version.py +2 -0
- fastapi_voyager/web/component/route-code-display.js +73 -0
- fastapi_voyager/web/component/schema-code-display.js +152 -0
- fastapi_voyager/web/component/schema-field-filter.js +189 -0
- fastapi_voyager/web/graph-ui.js +137 -0
- fastapi_voyager/web/graphviz.svg.css +42 -0
- fastapi_voyager/web/graphviz.svg.js +580 -0
- fastapi_voyager/web/index.html +224 -0
- fastapi_voyager/web/quasar.min.css +1 -0
- fastapi_voyager/web/quasar.min.js +127 -0
- fastapi_voyager/web/vue-main.js +213 -0
- fastapi_voyager-0.4.1.dist-info/METADATA +175 -0
- fastapi_voyager-0.4.1.dist-info/RECORD +24 -0
- fastapi_voyager-0.4.1.dist-info/WHEEL +4 -0
- fastapi_voyager-0.4.1.dist-info/entry_points.txt +2 -0
- fastapi_voyager-0.4.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
<html>
|
|
2
|
+
<head>
|
|
3
|
+
<title>FastAPI Router Viz</title>
|
|
4
|
+
<link rel="stylesheet" href="/static/graphviz.svg.css" />
|
|
5
|
+
<link rel="stylesheet" href="/static/quasar.min.css" />
|
|
6
|
+
<link
|
|
7
|
+
href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons"
|
|
8
|
+
rel="stylesheet"
|
|
9
|
+
type="text/css"
|
|
10
|
+
/>
|
|
11
|
+
</head>
|
|
12
|
+
|
|
13
|
+
<style>
|
|
14
|
+
html,
|
|
15
|
+
body {
|
|
16
|
+
height: 100%;
|
|
17
|
+
margin: 0;
|
|
18
|
+
}
|
|
19
|
+
body {
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: column;
|
|
22
|
+
}
|
|
23
|
+
/* Quasar select menu max-height for scroll */
|
|
24
|
+
.select-popup {
|
|
25
|
+
max-height: 400px;
|
|
26
|
+
overflow-y: auto;
|
|
27
|
+
overflow-x: hidden;
|
|
28
|
+
}
|
|
29
|
+
#graph {
|
|
30
|
+
flex: 1 1 auto;
|
|
31
|
+
overflow: auto;
|
|
32
|
+
}
|
|
33
|
+
</style>
|
|
34
|
+
<body>
|
|
35
|
+
<div id="q-app" class="column" style="height: 100%">
|
|
36
|
+
<div v-if="state.initializing" style="position:fixed; inset:0; display:flex; align-items:center; justify-content:center; z-index:2000; background:rgba(255,255,255,0.85); font-size:18px; font-family:Roboto, sans-serif; color:#444;">
|
|
37
|
+
<div style="text-align:center;">
|
|
38
|
+
<div class="q-mb-sm">Initializing...</div>
|
|
39
|
+
<q-spinner color="primary" size="32px" />
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
<div
|
|
43
|
+
style="
|
|
44
|
+
padding-top: 8px;
|
|
45
|
+
padding-left: 8px;
|
|
46
|
+
padding-bottom: 8px;
|
|
47
|
+
position: absolute;
|
|
48
|
+
width: 100%;
|
|
49
|
+
top: 0;
|
|
50
|
+
background-color: #fff;
|
|
51
|
+
z-index: 1;
|
|
52
|
+
border-bottom: 1px solid #ccc;
|
|
53
|
+
color: #211d1d;
|
|
54
|
+
"
|
|
55
|
+
>
|
|
56
|
+
<div class="row items-center q-col-gutter-md">
|
|
57
|
+
<div class="col-auto">
|
|
58
|
+
<q-select
|
|
59
|
+
v-model="state.tag"
|
|
60
|
+
:options="state.tagOptions"
|
|
61
|
+
use-input
|
|
62
|
+
input-debounce="0"
|
|
63
|
+
behavior="menu"
|
|
64
|
+
dense
|
|
65
|
+
outlined
|
|
66
|
+
style="min-width: 320px"
|
|
67
|
+
popup-content-class="select-popup"
|
|
68
|
+
clearable
|
|
69
|
+
label="Tags"
|
|
70
|
+
@filter="onFilterTags"
|
|
71
|
+
/>
|
|
72
|
+
</div>
|
|
73
|
+
|
|
74
|
+
<div class="col-auto">
|
|
75
|
+
<q-select
|
|
76
|
+
v-model="state.routeId"
|
|
77
|
+
:options="state.routeOptions"
|
|
78
|
+
option-label="label"
|
|
79
|
+
option-value="value"
|
|
80
|
+
emit-value
|
|
81
|
+
map-options
|
|
82
|
+
dense
|
|
83
|
+
outlined
|
|
84
|
+
style="min-width: 320px"
|
|
85
|
+
popup-content-class="select-popup"
|
|
86
|
+
clearable
|
|
87
|
+
placeholder="All routes"
|
|
88
|
+
label="Routes"
|
|
89
|
+
/>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<div class="col-auto">
|
|
93
|
+
<div class="column">
|
|
94
|
+
<q-option-group
|
|
95
|
+
v-model="state.showFields"
|
|
96
|
+
:options="state.fieldOptions"
|
|
97
|
+
color="primary"
|
|
98
|
+
type="radio"
|
|
99
|
+
inline
|
|
100
|
+
dense
|
|
101
|
+
/>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<div class="col-auto">
|
|
106
|
+
<q-btn
|
|
107
|
+
class="q-ml-md"
|
|
108
|
+
:loading="state.generating"
|
|
109
|
+
@click="onGenerate"
|
|
110
|
+
label="Generate"
|
|
111
|
+
outline
|
|
112
|
+
/>
|
|
113
|
+
</div>
|
|
114
|
+
<div class="col-auto">
|
|
115
|
+
<q-btn flat @click="onReset" label="Reset" />
|
|
116
|
+
</div>
|
|
117
|
+
<div class="col-auto q-ml-auto">
|
|
118
|
+
<q-btn
|
|
119
|
+
outline
|
|
120
|
+
icon="search"
|
|
121
|
+
label="Search"
|
|
122
|
+
@click="showDialog()"
|
|
123
|
+
/>
|
|
124
|
+
</div>
|
|
125
|
+
<div class="col-auto">
|
|
126
|
+
<q-btn
|
|
127
|
+
dense
|
|
128
|
+
round
|
|
129
|
+
flat
|
|
130
|
+
icon="help_outline"
|
|
131
|
+
aria-label="Help"
|
|
132
|
+
class="q-mr-md"
|
|
133
|
+
>
|
|
134
|
+
<q-tooltip
|
|
135
|
+
anchor="bottom middle"
|
|
136
|
+
self="top middle"
|
|
137
|
+
:offset="[0,8]"
|
|
138
|
+
>
|
|
139
|
+
<div
|
|
140
|
+
class="column items-start text-left"
|
|
141
|
+
style="line-height: 1.4; font-size: 12px"
|
|
142
|
+
>
|
|
143
|
+
<ul>
|
|
144
|
+
<li>scroll to zoom in/out</li>
|
|
145
|
+
<li>
|
|
146
|
+
click node to check highlight related nodes on the chart,
|
|
147
|
+
esc to unselect
|
|
148
|
+
</li>
|
|
149
|
+
<li>
|
|
150
|
+
shift + click to see schema's dependencies without
|
|
151
|
+
unrelated nodes
|
|
152
|
+
</li>
|
|
153
|
+
<li>alt + click to see schema details</li>
|
|
154
|
+
</ul>
|
|
155
|
+
</div>
|
|
156
|
+
</q-tooltip>
|
|
157
|
+
</q-btn>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
<!-- Detail Dialog -->
|
|
162
|
+
<q-dialog v-model="showDetail" :persistent="true" :maximized="true">
|
|
163
|
+
<detail-dialog
|
|
164
|
+
:schema-name="schemaName"
|
|
165
|
+
:show-fields="state.showFields"
|
|
166
|
+
:model-value="showDetail"
|
|
167
|
+
@close="closeDetail"
|
|
168
|
+
/>
|
|
169
|
+
</q-dialog>
|
|
170
|
+
|
|
171
|
+
<!-- Schema Field Filter Dialog -->
|
|
172
|
+
<q-dialog
|
|
173
|
+
v-model="showSchemaFieldFilter"
|
|
174
|
+
:persistent="true"
|
|
175
|
+
:maximized="true"
|
|
176
|
+
>
|
|
177
|
+
<schema-field-filter
|
|
178
|
+
:schemas="state.rawSchemasFull"
|
|
179
|
+
:schema-name="schemaFieldFilterSchema" @close="showSchemaFieldFilter = false" />
|
|
180
|
+
</q-dialog>
|
|
181
|
+
|
|
182
|
+
<!-- Schema Source Code Dialog (Ctrl + Click) -->
|
|
183
|
+
<q-dialog v-model="showSchemaCode" :maximized="true" :persistent="false" position="left" :seamless="false">
|
|
184
|
+
<schema-code-display
|
|
185
|
+
:schema-name="schemaCodeName"
|
|
186
|
+
:model-value="showSchemaCode"
|
|
187
|
+
:schemas="state.rawSchemasFull"
|
|
188
|
+
@close="showSchemaCode = false" />
|
|
189
|
+
</q-dialog>
|
|
190
|
+
|
|
191
|
+
<!-- Route Source Code Dialog (Alt + Click on route) -->
|
|
192
|
+
<q-dialog v-model="showRouteCode" :maximized="true" :persistent="false" position="right" :seamless="false">
|
|
193
|
+
<route-code-display
|
|
194
|
+
:route-id="routeCodeId"
|
|
195
|
+
:model-value="showRouteCode"
|
|
196
|
+
:routes="state.routeItems"
|
|
197
|
+
@close="showRouteCode = false" />
|
|
198
|
+
</q-dialog>
|
|
199
|
+
|
|
200
|
+
<div id="graph" style="width: 100%; flex: 1 1 auto; overflow: auto"></div>
|
|
201
|
+
</div>
|
|
202
|
+
|
|
203
|
+
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.min.js" ></script>
|
|
204
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/7.9.0/d3.min.js" integrity="sha512-vc58qvvBdrDR4etbxMdlTt4GBQk1qjvyORR2nrsPsFPyrs+/u5c3+1Ct6upOgdZoIl7eq6k3a1UPDSNAQi/32A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
205
|
+
<script src="https://unpkg.com/@hpcc-js/wasm@2.20.0/dist/graphviz.umd.js"></script>
|
|
206
|
+
<script src="https://unpkg.com/d3-graphviz@5.6.0/build/d3-graphviz.js"></script>
|
|
207
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.13/jquery.mousewheel.min.js"></script>
|
|
208
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-color/2.1.2/jquery.color.min.js"></script>
|
|
209
|
+
|
|
210
|
+
<!-- Add the following at the end of your body tag -->
|
|
211
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/3.5.22/vue.global.prod.min.js" integrity="sha512-Y9sKU0AwzWRxKSLd2i35LuDpUdHY/E9tJrKG0mxw0qYQ75VVgGYazIUQPwKhFK9vGO3jIgAtxLiSq8GQ7PDfUg==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
212
|
+
<script src="/static/quasar.min.js"></script>
|
|
213
|
+
<script src="/static/graphviz.svg.js"></script>
|
|
214
|
+
<!-- highlight.js minimal ES module load (python only) -->
|
|
215
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github.min.css" />
|
|
216
|
+
<script type="module">
|
|
217
|
+
import hljs from 'https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.9.0/build/es/highlight.min.js';
|
|
218
|
+
import python from 'https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.9.0/build/es/languages/python.min.js';
|
|
219
|
+
hljs.registerLanguage('python', python);
|
|
220
|
+
window.hljs = hljs;
|
|
221
|
+
</script>
|
|
222
|
+
<script type="module" src="/static/vue-main.js"></script>
|
|
223
|
+
</body>
|
|
224
|
+
</html>
|