audex 1.0.7a3__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.
Files changed (192) hide show
  1. audex/__init__.py +9 -0
  2. audex/__main__.py +7 -0
  3. audex/cli/__init__.py +189 -0
  4. audex/cli/apis/__init__.py +12 -0
  5. audex/cli/apis/init/__init__.py +34 -0
  6. audex/cli/apis/init/gencfg.py +130 -0
  7. audex/cli/apis/init/setup.py +330 -0
  8. audex/cli/apis/init/vprgroup.py +125 -0
  9. audex/cli/apis/serve.py +141 -0
  10. audex/cli/args.py +356 -0
  11. audex/cli/exceptions.py +44 -0
  12. audex/cli/helper/__init__.py +0 -0
  13. audex/cli/helper/ansi.py +193 -0
  14. audex/cli/helper/display.py +288 -0
  15. audex/config/__init__.py +64 -0
  16. audex/config/core/__init__.py +30 -0
  17. audex/config/core/app.py +29 -0
  18. audex/config/core/audio.py +45 -0
  19. audex/config/core/logging.py +163 -0
  20. audex/config/core/session.py +11 -0
  21. audex/config/helper/__init__.py +1 -0
  22. audex/config/helper/client/__init__.py +1 -0
  23. audex/config/helper/client/http.py +28 -0
  24. audex/config/helper/client/websocket.py +21 -0
  25. audex/config/helper/provider/__init__.py +1 -0
  26. audex/config/helper/provider/dashscope.py +13 -0
  27. audex/config/helper/provider/unisound.py +18 -0
  28. audex/config/helper/provider/xfyun.py +23 -0
  29. audex/config/infrastructure/__init__.py +31 -0
  30. audex/config/infrastructure/cache.py +51 -0
  31. audex/config/infrastructure/database.py +48 -0
  32. audex/config/infrastructure/recorder.py +32 -0
  33. audex/config/infrastructure/store.py +19 -0
  34. audex/config/provider/__init__.py +18 -0
  35. audex/config/provider/transcription.py +109 -0
  36. audex/config/provider/vpr.py +99 -0
  37. audex/container.py +40 -0
  38. audex/entity/__init__.py +468 -0
  39. audex/entity/doctor.py +109 -0
  40. audex/entity/doctor.pyi +51 -0
  41. audex/entity/fields.py +401 -0
  42. audex/entity/segment.py +115 -0
  43. audex/entity/segment.pyi +38 -0
  44. audex/entity/session.py +133 -0
  45. audex/entity/session.pyi +47 -0
  46. audex/entity/utterance.py +142 -0
  47. audex/entity/utterance.pyi +48 -0
  48. audex/entity/vp.py +68 -0
  49. audex/entity/vp.pyi +35 -0
  50. audex/exceptions.py +157 -0
  51. audex/filters/__init__.py +692 -0
  52. audex/filters/generated/__init__.py +21 -0
  53. audex/filters/generated/doctor.py +987 -0
  54. audex/filters/generated/segment.py +723 -0
  55. audex/filters/generated/session.py +978 -0
  56. audex/filters/generated/utterance.py +939 -0
  57. audex/filters/generated/vp.py +815 -0
  58. audex/helper/__init__.py +1 -0
  59. audex/helper/hash.py +33 -0
  60. audex/helper/mixin.py +65 -0
  61. audex/helper/net.py +19 -0
  62. audex/helper/settings/__init__.py +830 -0
  63. audex/helper/settings/fields.py +317 -0
  64. audex/helper/stream.py +153 -0
  65. audex/injectors/__init__.py +1 -0
  66. audex/injectors/config.py +12 -0
  67. audex/injectors/lifespan.py +7 -0
  68. audex/lib/__init__.py +1 -0
  69. audex/lib/cache/__init__.py +383 -0
  70. audex/lib/cache/inmemory.py +513 -0
  71. audex/lib/database/__init__.py +83 -0
  72. audex/lib/database/sqlite.py +406 -0
  73. audex/lib/exporter.py +189 -0
  74. audex/lib/injectors/__init__.py +1 -0
  75. audex/lib/injectors/cache.py +25 -0
  76. audex/lib/injectors/container.py +47 -0
  77. audex/lib/injectors/exporter.py +26 -0
  78. audex/lib/injectors/recorder.py +33 -0
  79. audex/lib/injectors/server.py +17 -0
  80. audex/lib/injectors/session.py +18 -0
  81. audex/lib/injectors/sqlite.py +24 -0
  82. audex/lib/injectors/store.py +13 -0
  83. audex/lib/injectors/transcription.py +42 -0
  84. audex/lib/injectors/usb.py +12 -0
  85. audex/lib/injectors/vpr.py +65 -0
  86. audex/lib/injectors/wifi.py +7 -0
  87. audex/lib/recorder.py +844 -0
  88. audex/lib/repos/__init__.py +149 -0
  89. audex/lib/repos/container.py +23 -0
  90. audex/lib/repos/database/__init__.py +1 -0
  91. audex/lib/repos/database/sqlite.py +672 -0
  92. audex/lib/repos/decorators.py +74 -0
  93. audex/lib/repos/doctor.py +286 -0
  94. audex/lib/repos/segment.py +302 -0
  95. audex/lib/repos/session.py +285 -0
  96. audex/lib/repos/tables/__init__.py +70 -0
  97. audex/lib/repos/tables/doctor.py +137 -0
  98. audex/lib/repos/tables/segment.py +113 -0
  99. audex/lib/repos/tables/session.py +140 -0
  100. audex/lib/repos/tables/utterance.py +131 -0
  101. audex/lib/repos/tables/vp.py +102 -0
  102. audex/lib/repos/utterance.py +288 -0
  103. audex/lib/repos/vp.py +286 -0
  104. audex/lib/restful.py +251 -0
  105. audex/lib/server/__init__.py +97 -0
  106. audex/lib/server/auth.py +98 -0
  107. audex/lib/server/handlers.py +248 -0
  108. audex/lib/server/templates/index.html.j2 +226 -0
  109. audex/lib/server/templates/login.html.j2 +111 -0
  110. audex/lib/server/templates/static/script.js +68 -0
  111. audex/lib/server/templates/static/style.css +579 -0
  112. audex/lib/server/types.py +123 -0
  113. audex/lib/session.py +503 -0
  114. audex/lib/store/__init__.py +238 -0
  115. audex/lib/store/localfile.py +411 -0
  116. audex/lib/transcription/__init__.py +33 -0
  117. audex/lib/transcription/dashscope.py +525 -0
  118. audex/lib/transcription/events.py +62 -0
  119. audex/lib/usb.py +554 -0
  120. audex/lib/vpr/__init__.py +38 -0
  121. audex/lib/vpr/unisound/__init__.py +185 -0
  122. audex/lib/vpr/unisound/types.py +469 -0
  123. audex/lib/vpr/xfyun/__init__.py +483 -0
  124. audex/lib/vpr/xfyun/types.py +679 -0
  125. audex/lib/websocket/__init__.py +8 -0
  126. audex/lib/websocket/connection.py +485 -0
  127. audex/lib/websocket/pool.py +991 -0
  128. audex/lib/wifi.py +1146 -0
  129. audex/lifespan.py +75 -0
  130. audex/service/__init__.py +27 -0
  131. audex/service/decorators.py +73 -0
  132. audex/service/doctor/__init__.py +652 -0
  133. audex/service/doctor/const.py +36 -0
  134. audex/service/doctor/exceptions.py +96 -0
  135. audex/service/doctor/types.py +54 -0
  136. audex/service/export/__init__.py +236 -0
  137. audex/service/export/const.py +17 -0
  138. audex/service/export/exceptions.py +34 -0
  139. audex/service/export/types.py +21 -0
  140. audex/service/injectors/__init__.py +1 -0
  141. audex/service/injectors/container.py +53 -0
  142. audex/service/injectors/doctor.py +34 -0
  143. audex/service/injectors/export.py +27 -0
  144. audex/service/injectors/session.py +49 -0
  145. audex/service/session/__init__.py +754 -0
  146. audex/service/session/const.py +34 -0
  147. audex/service/session/exceptions.py +67 -0
  148. audex/service/session/types.py +91 -0
  149. audex/types.py +39 -0
  150. audex/utils.py +287 -0
  151. audex/valueobj/__init__.py +81 -0
  152. audex/valueobj/common/__init__.py +1 -0
  153. audex/valueobj/common/auth.py +84 -0
  154. audex/valueobj/common/email.py +16 -0
  155. audex/valueobj/common/ops.py +22 -0
  156. audex/valueobj/common/phone.py +84 -0
  157. audex/valueobj/common/version.py +72 -0
  158. audex/valueobj/session.py +19 -0
  159. audex/valueobj/utterance.py +15 -0
  160. audex/view/__init__.py +51 -0
  161. audex/view/container.py +17 -0
  162. audex/view/decorators.py +303 -0
  163. audex/view/pages/__init__.py +1 -0
  164. audex/view/pages/dashboard/__init__.py +286 -0
  165. audex/view/pages/dashboard/wifi.py +407 -0
  166. audex/view/pages/login.py +110 -0
  167. audex/view/pages/recording.py +348 -0
  168. audex/view/pages/register.py +202 -0
  169. audex/view/pages/sessions/__init__.py +196 -0
  170. audex/view/pages/sessions/details.py +224 -0
  171. audex/view/pages/sessions/export.py +443 -0
  172. audex/view/pages/settings.py +374 -0
  173. audex/view/pages/voiceprint/__init__.py +1 -0
  174. audex/view/pages/voiceprint/enroll.py +195 -0
  175. audex/view/pages/voiceprint/update.py +195 -0
  176. audex/view/static/css/dashboard.css +452 -0
  177. audex/view/static/css/glass.css +22 -0
  178. audex/view/static/css/global.css +541 -0
  179. audex/view/static/css/login.css +386 -0
  180. audex/view/static/css/recording.css +439 -0
  181. audex/view/static/css/register.css +293 -0
  182. audex/view/static/css/sessions/styles.css +501 -0
  183. audex/view/static/css/settings.css +186 -0
  184. audex/view/static/css/voiceprint/enroll.css +43 -0
  185. audex/view/static/css/voiceprint/styles.css +209 -0
  186. audex/view/static/css/voiceprint/update.css +44 -0
  187. audex/view/static/images/logo.svg +95 -0
  188. audex/view/static/js/recording.js +42 -0
  189. audex-1.0.7a3.dist-info/METADATA +361 -0
  190. audex-1.0.7a3.dist-info/RECORD +192 -0
  191. audex-1.0.7a3.dist-info/WHEEL +4 -0
  192. audex-1.0.7a3.dist-info/entry_points.txt +3 -0
@@ -0,0 +1,386 @@
1
+ /* ==================== Base Styles ==================== */
2
+
3
+ /* Smooth rendering */
4
+ * {
5
+ -webkit-font-smoothing: antialiased;
6
+ -moz-osx-font-smoothing: grayscale;
7
+ }
8
+
9
+ html, body {
10
+ margin: 0;
11
+ padding: 0;
12
+ overflow: hidden !important;
13
+ height: 100vh;
14
+ width: 100vw;
15
+ background: #ffffff;
16
+ }
17
+
18
+ /* ==================== Layout Classes ==================== */
19
+
20
+ .items-center {
21
+ align-items: center;
22
+ }
23
+
24
+ .justify-center {
25
+ justify-content: center;
26
+ }
27
+
28
+ .gap-4 {
29
+ gap: 1rem;
30
+ }
31
+
32
+ .mx-auto {
33
+ margin-left: auto;
34
+ margin-right: auto;
35
+ }
36
+
37
+ .mb-1 {
38
+ margin-bottom: 0.25rem;
39
+ }
40
+
41
+ .mb-2 {
42
+ margin-bottom: 0.5rem;
43
+ }
44
+
45
+ .mb-3 {
46
+ margin-bottom: 0.75rem;
47
+ }
48
+
49
+ .mb-4 {
50
+ margin-bottom: 1rem;
51
+ }
52
+
53
+ .mb-5 {
54
+ margin-bottom: 1.25rem;
55
+ }
56
+
57
+ .mt-4 {
58
+ margin-top: 1rem;
59
+ }
60
+
61
+ .my-3 {
62
+ margin-top: 0.75rem;
63
+ margin-bottom: 0.75rem;
64
+ }
65
+
66
+ .w-full {
67
+ width: 100%;
68
+ }
69
+
70
+ .w-16 {
71
+ width: 4rem;
72
+ }
73
+
74
+ .flex-1 {
75
+ flex: 1;
76
+ }
77
+
78
+ .h-16 {
79
+ height: 4rem;
80
+ }
81
+
82
+ /* ==================== Typography ==================== */
83
+
84
+ .text-xs {
85
+ font-size: 0.75rem;
86
+ line-height: 1rem;
87
+ }
88
+
89
+ .text-sm {
90
+ font-size: 0.875rem;
91
+ line-height: 1.25rem;
92
+ }
93
+
94
+ .text-h5 {
95
+ font-size: 1.5rem;
96
+ line-height: 2rem;
97
+ }
98
+
99
+ .text-center {
100
+ text-align: center;
101
+ }
102
+
103
+ .text-grey-6 {
104
+ color: #757575;
105
+ }
106
+
107
+ .text-grey-7 {
108
+ color: #616161;
109
+ }
110
+
111
+ /* ==================== Login Card ==================== */
112
+
113
+ .login-card {
114
+ border-radius: 28px !important;
115
+ background: rgba(255, 255, 255, 0.98) !important;
116
+ backdrop-filter: blur(20px) !important;
117
+ -webkit-backdrop-filter: blur(20px) !important;
118
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.08), 0 8px 24px rgba(0, 0, 0, 0.05), 0 0 1px rgba(0, 0, 0, 0.1) !important;
119
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
120
+ }
121
+
122
+ .login-card:hover {
123
+ box-shadow: 0 24px 70px rgba(0, 0, 0, 0.1), 0 10px 28px rgba(0, 0, 0, 0.06), 0 0 1px rgba(0, 0, 0, 0.1) !important;
124
+ }
125
+
126
+ /* ==================== Background ==================== */
127
+
128
+ .bg-white {
129
+ background: linear-gradient(135deg, #fafafa 0%, #ffffff 100%) !important;
130
+ }
131
+
132
+ /* ==================== Logo ==================== */
133
+
134
+ .login-logo {
135
+ width: 64px !important;
136
+ height: 64px !important;
137
+ max-width: 100% !important;
138
+ object-fit: contain !important;
139
+ display: block !important;
140
+ }
141
+
142
+ /* ==================== Gradient Title ==================== */
143
+
144
+ .gradient-title {
145
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 50%, #f093fb 100%);
146
+ background-size: 200% 200%;
147
+ -webkit-background-clip: text;
148
+ -webkit-text-fill-color: transparent;
149
+ background-clip: text;
150
+ font-weight: 700;
151
+ animation: gradient-shift 6s ease infinite;
152
+ }
153
+
154
+ @keyframes gradient-shift {
155
+ 0%, 100% {
156
+ background-position: 0 50%;
157
+ }
158
+ 50% {
159
+ background-position: 100% 50%;
160
+ }
161
+ }
162
+
163
+ /* ==================== Clean Input ==================== */
164
+
165
+ .clean-input .q-field__control {
166
+ background: transparent !important;
167
+ border: none !important;
168
+ border-radius: 0 !important;
169
+ box-shadow: none !important;
170
+ height: 48px !important;
171
+ }
172
+
173
+ .clean-input .q-field__native,
174
+ .clean-input input {
175
+ color: #1f2937 !important;
176
+ font-size: 15px !important;
177
+ font-weight: 400 !important;
178
+ }
179
+
180
+ .clean-input .q-field__native::placeholder,
181
+ .clean-input input::placeholder {
182
+ color: #9ca3af !important;
183
+ opacity: 1 !important;
184
+ }
185
+
186
+ .clean-input .q-field__control:before {
187
+ border: none !important;
188
+ border-bottom: 1px solid rgba(0, 0, 0, 0.12) !important;
189
+ transition: border-color 0.3s ease !important;
190
+ }
191
+
192
+ .clean-input .q-field__control:hover:before {
193
+ border-bottom-color: rgba(0, 0, 0, 0.2) !important;
194
+ }
195
+
196
+ .clean-input .q-field__control:after {
197
+ border: none !important;
198
+ border-bottom: 2px solid #667eea !important;
199
+ transform: scaleX(0);
200
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
201
+ }
202
+
203
+ .clean-input.q-field--focused .q-field__control:after {
204
+ transform: scaleX(1);
205
+ }
206
+
207
+ .clean-input .q-field__append {
208
+ height: 48px !important;
209
+ display: flex !important;
210
+ align-items: center !important;
211
+ justify-content: center !important;
212
+ }
213
+
214
+ .clean-input .q-field__append .q-icon {
215
+ color: #9ca3af !important;
216
+ transition: color 0.2s ease !important;
217
+ }
218
+
219
+ .clean-input .q-field__append .q-icon:hover {
220
+ color: #6b7280 !important;
221
+ }
222
+
223
+ /* ==================== Buttons ==================== */
224
+
225
+ /* Login button */
226
+ .login-button {
227
+ border-radius: 24px !important;
228
+ font-size: 16px !important;
229
+ font-weight: 500 !important;
230
+ letter-spacing: 0.02em !important;
231
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%) !important;
232
+ box-shadow: 0 4px 16px rgba(102, 126, 234, 0.25), 0 2px 8px rgba(118, 75, 162, 0.15) !important;
233
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
234
+ text-transform: none !important;
235
+ }
236
+
237
+ .login-button:hover {
238
+ transform: translateY(-2px);
239
+ box-shadow: 0 8px 24px rgba(102, 126, 234, 0.35), 0 4px 12px rgba(118, 75, 162, 0.25) !important;
240
+ background: linear-gradient(135deg, #7c8ef0 0%, #8a5db0 100%) !important;
241
+ }
242
+
243
+ .login-button:active {
244
+ transform: translateY(0);
245
+ }
246
+
247
+ /* Register button */
248
+ .register-button {
249
+ border-radius: 24px !important;
250
+ border: 1px solid rgba(0, 0, 0, 0.08) !important;
251
+ font-size: 16px !important;
252
+ font-weight: 500 !important;
253
+ letter-spacing: 0.02em !important;
254
+ background: rgba(248, 249, 250, 0.6) !important;
255
+ color: #6b7280 !important;
256
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04) !important;
257
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
258
+ text-transform: none !important;
259
+ }
260
+
261
+ .register-button:hover {
262
+ background: rgba(243, 244, 246, 0.8) !important;
263
+ border-color: rgba(0, 0, 0, 0.12) !important;
264
+ color: #4b5563 !important;
265
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08) !important;
266
+ transform: translateY(-2px);
267
+ }
268
+
269
+ .register-button:active {
270
+ transform: translateY(0);
271
+ }
272
+
273
+ /* ==================== Separator ==================== */
274
+
275
+ .q-separator {
276
+ background-color: rgba(0, 0, 0, 0.08) !important;
277
+ }
278
+
279
+ /* ==================== Responsive - Small Screens ==================== */
280
+
281
+ @media (max-height: 720px) {
282
+ .login-card {
283
+ padding: 24px 32px !important;
284
+ }
285
+
286
+ .login-logo {
287
+ width: 56px !important;
288
+ height: 56px !important;
289
+ }
290
+
291
+ .mb-4 {
292
+ margin-bottom: 0.75rem !important;
293
+ }
294
+ }
295
+
296
+ @media (max-height: 650px) {
297
+ .login-card {
298
+ padding: 20px 28px !important;
299
+ }
300
+
301
+ .login-logo {
302
+ width: 48px !important;
303
+ height: 48px !important;
304
+ }
305
+
306
+ .text-h5 {
307
+ font-size: 1.25rem !important;
308
+ line-height: 1.75rem !important;
309
+ }
310
+
311
+ .login-button,
312
+ .register-button {
313
+ height: 42px !important;
314
+ }
315
+
316
+ .mb-1 {
317
+ margin-bottom: 0.125rem !important;
318
+ }
319
+
320
+ .mb-2 {
321
+ margin-bottom: 0.25rem !important;
322
+ }
323
+
324
+ .mb-3 {
325
+ margin-bottom: 0.5rem !important;
326
+ }
327
+
328
+ .mb-4 {
329
+ margin-bottom: 0.5rem !important;
330
+ }
331
+
332
+ .my-3 {
333
+ margin-top: 0.5rem !important;
334
+ margin-bottom: 0.5rem !important;
335
+ }
336
+ }
337
+
338
+ @media (max-height: 550px) {
339
+ .login-card {
340
+ padding: 16px 24px !important;
341
+ }
342
+
343
+ .login-logo {
344
+ width: 40px !important;
345
+ height: 40px !important;
346
+ }
347
+
348
+ .text-h5 {
349
+ font-size: 1.125rem !important;
350
+ line-height: 1.5rem !important;
351
+ }
352
+
353
+ .text-sm {
354
+ font-size: 0.8125rem !important;
355
+ }
356
+
357
+ .login-button,
358
+ .register-button {
359
+ height: 38px !important;
360
+ font-size: 15px !important;
361
+ }
362
+ }
363
+
364
+ @media (max-height: 500px) and (orientation: landscape) {
365
+ .login-card {
366
+ padding: 12px 24px !important;
367
+ }
368
+
369
+ .login-logo {
370
+ width: 32px !important;
371
+ height: 32px !important;
372
+ }
373
+
374
+ .mb-1, .mb-2, .mb-3 {
375
+ margin-bottom: 0.25rem !important;
376
+ }
377
+
378
+ .mb-4 {
379
+ margin-bottom: 0.375rem !important;
380
+ }
381
+
382
+ .my-3 {
383
+ margin-top: 0.375rem !important;
384
+ margin-bottom: 0.375rem !important;
385
+ }
386
+ }