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,815 @@
1
+ # This file is auto-generated by PrototypeX filter generator.
2
+ # Do not edit manually - changes will be overwritten.
3
+ # Regenerate using: python -m scripts.gen_filters gen
4
+
5
+ from __future__ import annotations
6
+
7
+ import datetime
8
+ import typing as t
9
+
10
+ from audex.entity.vp import VP
11
+ from audex.filters import FieldFilter
12
+ from audex.filters import Filter
13
+ from audex.filters import FilterBuilder
14
+ from audex.filters import StringFieldFilter
15
+
16
+
17
+ class VPFilterBuilder(FilterBuilder[VP]):
18
+ """VP filter builder with full type hints and IDE support.
19
+
20
+ This class is auto-generated. Do not edit manually.
21
+ """
22
+
23
+ class _IdField(StringFieldFilter):
24
+ """Chainable id filter with type-safe operations."""
25
+
26
+ def __init__(self, builder: VPFilterBuilder) -> None:
27
+ super().__init__("id", object.__getattribute__(builder, "_filter"))
28
+ self._parent_builder = builder
29
+
30
+ def eq(self, value: str) -> VPFilterBuilder:
31
+ super().eq(value)
32
+ return self._parent_builder
33
+
34
+ def ne(self, value: str) -> VPFilterBuilder:
35
+ super().ne(value)
36
+ return self._parent_builder
37
+
38
+ def gt(self, value: str) -> VPFilterBuilder:
39
+ super().gt(value)
40
+ return self._parent_builder
41
+
42
+ def lt(self, value: str) -> VPFilterBuilder:
43
+ super().lt(value)
44
+ return self._parent_builder
45
+
46
+ def gte(self, value: str) -> VPFilterBuilder:
47
+ super().gte(value)
48
+ return self._parent_builder
49
+
50
+ def lte(self, value: str) -> VPFilterBuilder:
51
+ super().lte(value)
52
+ return self._parent_builder
53
+
54
+ def in_(self, values: t.Sequence[str]) -> VPFilterBuilder:
55
+ super().in_(values)
56
+ return self._parent_builder
57
+
58
+ def nin(self, values: t.Sequence[str]) -> VPFilterBuilder:
59
+ super().nin(values)
60
+ return self._parent_builder
61
+
62
+ def between(self, value1: str, value2: str) -> VPFilterBuilder:
63
+ super().between(value1, value2)
64
+ return self._parent_builder
65
+
66
+ def is_null(self) -> VPFilterBuilder:
67
+ super().is_null()
68
+ return self._parent_builder
69
+
70
+ def is_not_null(self) -> VPFilterBuilder:
71
+ super().is_not_null()
72
+ return self._parent_builder
73
+
74
+ def asc(self) -> VPFilterBuilder:
75
+ super().asc()
76
+ return self._parent_builder
77
+
78
+ def desc(self) -> VPFilterBuilder:
79
+ super().desc()
80
+ return self._parent_builder
81
+
82
+ def contains(self, value: str) -> VPFilterBuilder:
83
+ super().contains(value)
84
+ return self._parent_builder
85
+
86
+ def startswith(self, value: str) -> VPFilterBuilder:
87
+ super().startswith(value)
88
+ return self._parent_builder
89
+
90
+ def endswith(self, value: str) -> VPFilterBuilder:
91
+ super().endswith(value)
92
+ return self._parent_builder
93
+
94
+ class _CreatedAtField(FieldFilter[datetime.datetime]):
95
+ """Chainable created_at filter with type-safe operations."""
96
+
97
+ def __init__(self, builder: VPFilterBuilder) -> None:
98
+ super().__init__("created_at", object.__getattribute__(builder, "_filter"))
99
+ self._parent_builder = builder
100
+
101
+ def eq(self, value: datetime.datetime) -> VPFilterBuilder:
102
+ super().eq(value)
103
+ return self._parent_builder
104
+
105
+ def ne(self, value: datetime.datetime) -> VPFilterBuilder:
106
+ super().ne(value)
107
+ return self._parent_builder
108
+
109
+ def gt(self, value: datetime.datetime) -> VPFilterBuilder:
110
+ super().gt(value)
111
+ return self._parent_builder
112
+
113
+ def lt(self, value: datetime.datetime) -> VPFilterBuilder:
114
+ super().lt(value)
115
+ return self._parent_builder
116
+
117
+ def gte(self, value: datetime.datetime) -> VPFilterBuilder:
118
+ super().gte(value)
119
+ return self._parent_builder
120
+
121
+ def lte(self, value: datetime.datetime) -> VPFilterBuilder:
122
+ super().lte(value)
123
+ return self._parent_builder
124
+
125
+ def in_(self, values: t.Sequence[datetime.datetime]) -> VPFilterBuilder:
126
+ super().in_(values)
127
+ return self._parent_builder
128
+
129
+ def nin(self, values: t.Sequence[datetime.datetime]) -> VPFilterBuilder:
130
+ super().nin(values)
131
+ return self._parent_builder
132
+
133
+ def between(self, value1: datetime.datetime, value2: datetime.datetime) -> VPFilterBuilder:
134
+ super().between(value1, value2)
135
+ return self._parent_builder
136
+
137
+ def is_null(self) -> VPFilterBuilder:
138
+ super().is_null()
139
+ return self._parent_builder
140
+
141
+ def is_not_null(self) -> VPFilterBuilder:
142
+ super().is_not_null()
143
+ return self._parent_builder
144
+
145
+ def asc(self) -> VPFilterBuilder:
146
+ super().asc()
147
+ return self._parent_builder
148
+
149
+ def desc(self) -> VPFilterBuilder:
150
+ super().desc()
151
+ return self._parent_builder
152
+
153
+ class _UpdatedAtField(FieldFilter[datetime.datetime | None]):
154
+ """Chainable updated_at filter with type-safe operations."""
155
+
156
+ def __init__(self, builder: VPFilterBuilder) -> None:
157
+ super().__init__("updated_at", object.__getattribute__(builder, "_filter"))
158
+ self._parent_builder = builder
159
+
160
+ def eq(self, value: datetime.datetime | None) -> VPFilterBuilder:
161
+ super().eq(value)
162
+ return self._parent_builder
163
+
164
+ def ne(self, value: datetime.datetime | None) -> VPFilterBuilder:
165
+ super().ne(value)
166
+ return self._parent_builder
167
+
168
+ def gt(self, value: datetime.datetime | None) -> VPFilterBuilder:
169
+ super().gt(value)
170
+ return self._parent_builder
171
+
172
+ def lt(self, value: datetime.datetime | None) -> VPFilterBuilder:
173
+ super().lt(value)
174
+ return self._parent_builder
175
+
176
+ def gte(self, value: datetime.datetime | None) -> VPFilterBuilder:
177
+ super().gte(value)
178
+ return self._parent_builder
179
+
180
+ def lte(self, value: datetime.datetime | None) -> VPFilterBuilder:
181
+ super().lte(value)
182
+ return self._parent_builder
183
+
184
+ def in_(self, values: t.Sequence[datetime.datetime | None]) -> VPFilterBuilder:
185
+ super().in_(values)
186
+ return self._parent_builder
187
+
188
+ def nin(self, values: t.Sequence[datetime.datetime | None]) -> VPFilterBuilder:
189
+ super().nin(values)
190
+ return self._parent_builder
191
+
192
+ def between(
193
+ self, value1: datetime.datetime | None, value2: datetime.datetime | None
194
+ ) -> VPFilterBuilder:
195
+ super().between(value1, value2)
196
+ return self._parent_builder
197
+
198
+ def is_null(self) -> VPFilterBuilder:
199
+ super().is_null()
200
+ return self._parent_builder
201
+
202
+ def is_not_null(self) -> VPFilterBuilder:
203
+ super().is_not_null()
204
+ return self._parent_builder
205
+
206
+ def asc(self) -> VPFilterBuilder:
207
+ super().asc()
208
+ return self._parent_builder
209
+
210
+ def desc(self) -> VPFilterBuilder:
211
+ super().desc()
212
+ return self._parent_builder
213
+
214
+ class _DoctorIdField(StringFieldFilter):
215
+ """Chainable doctor_id filter with type-safe operations."""
216
+
217
+ def __init__(self, builder: VPFilterBuilder) -> None:
218
+ super().__init__("doctor_id", object.__getattribute__(builder, "_filter"))
219
+ self._parent_builder = builder
220
+
221
+ def eq(self, value: str) -> VPFilterBuilder:
222
+ super().eq(value)
223
+ return self._parent_builder
224
+
225
+ def ne(self, value: str) -> VPFilterBuilder:
226
+ super().ne(value)
227
+ return self._parent_builder
228
+
229
+ def gt(self, value: str) -> VPFilterBuilder:
230
+ super().gt(value)
231
+ return self._parent_builder
232
+
233
+ def lt(self, value: str) -> VPFilterBuilder:
234
+ super().lt(value)
235
+ return self._parent_builder
236
+
237
+ def gte(self, value: str) -> VPFilterBuilder:
238
+ super().gte(value)
239
+ return self._parent_builder
240
+
241
+ def lte(self, value: str) -> VPFilterBuilder:
242
+ super().lte(value)
243
+ return self._parent_builder
244
+
245
+ def in_(self, values: t.Sequence[str]) -> VPFilterBuilder:
246
+ super().in_(values)
247
+ return self._parent_builder
248
+
249
+ def nin(self, values: t.Sequence[str]) -> VPFilterBuilder:
250
+ super().nin(values)
251
+ return self._parent_builder
252
+
253
+ def between(self, value1: str, value2: str) -> VPFilterBuilder:
254
+ super().between(value1, value2)
255
+ return self._parent_builder
256
+
257
+ def is_null(self) -> VPFilterBuilder:
258
+ super().is_null()
259
+ return self._parent_builder
260
+
261
+ def is_not_null(self) -> VPFilterBuilder:
262
+ super().is_not_null()
263
+ return self._parent_builder
264
+
265
+ def asc(self) -> VPFilterBuilder:
266
+ super().asc()
267
+ return self._parent_builder
268
+
269
+ def desc(self) -> VPFilterBuilder:
270
+ super().desc()
271
+ return self._parent_builder
272
+
273
+ def contains(self, value: str) -> VPFilterBuilder:
274
+ super().contains(value)
275
+ return self._parent_builder
276
+
277
+ def startswith(self, value: str) -> VPFilterBuilder:
278
+ super().startswith(value)
279
+ return self._parent_builder
280
+
281
+ def endswith(self, value: str) -> VPFilterBuilder:
282
+ super().endswith(value)
283
+ return self._parent_builder
284
+
285
+ class _VprUidField(StringFieldFilter):
286
+ """Chainable vpr_uid filter with type-safe operations."""
287
+
288
+ def __init__(self, builder: VPFilterBuilder) -> None:
289
+ super().__init__("vpr_uid", object.__getattribute__(builder, "_filter"))
290
+ self._parent_builder = builder
291
+
292
+ def eq(self, value: str) -> VPFilterBuilder:
293
+ super().eq(value)
294
+ return self._parent_builder
295
+
296
+ def ne(self, value: str) -> VPFilterBuilder:
297
+ super().ne(value)
298
+ return self._parent_builder
299
+
300
+ def gt(self, value: str) -> VPFilterBuilder:
301
+ super().gt(value)
302
+ return self._parent_builder
303
+
304
+ def lt(self, value: str) -> VPFilterBuilder:
305
+ super().lt(value)
306
+ return self._parent_builder
307
+
308
+ def gte(self, value: str) -> VPFilterBuilder:
309
+ super().gte(value)
310
+ return self._parent_builder
311
+
312
+ def lte(self, value: str) -> VPFilterBuilder:
313
+ super().lte(value)
314
+ return self._parent_builder
315
+
316
+ def in_(self, values: t.Sequence[str]) -> VPFilterBuilder:
317
+ super().in_(values)
318
+ return self._parent_builder
319
+
320
+ def nin(self, values: t.Sequence[str]) -> VPFilterBuilder:
321
+ super().nin(values)
322
+ return self._parent_builder
323
+
324
+ def between(self, value1: str, value2: str) -> VPFilterBuilder:
325
+ super().between(value1, value2)
326
+ return self._parent_builder
327
+
328
+ def is_null(self) -> VPFilterBuilder:
329
+ super().is_null()
330
+ return self._parent_builder
331
+
332
+ def is_not_null(self) -> VPFilterBuilder:
333
+ super().is_not_null()
334
+ return self._parent_builder
335
+
336
+ def asc(self) -> VPFilterBuilder:
337
+ super().asc()
338
+ return self._parent_builder
339
+
340
+ def desc(self) -> VPFilterBuilder:
341
+ super().desc()
342
+ return self._parent_builder
343
+
344
+ def contains(self, value: str) -> VPFilterBuilder:
345
+ super().contains(value)
346
+ return self._parent_builder
347
+
348
+ def startswith(self, value: str) -> VPFilterBuilder:
349
+ super().startswith(value)
350
+ return self._parent_builder
351
+
352
+ def endswith(self, value: str) -> VPFilterBuilder:
353
+ super().endswith(value)
354
+ return self._parent_builder
355
+
356
+ class _VprGroupIdField(StringFieldFilter):
357
+ """Chainable vpr_group_id filter with type-safe operations."""
358
+
359
+ def __init__(self, builder: VPFilterBuilder) -> None:
360
+ super().__init__("vpr_group_id", object.__getattribute__(builder, "_filter"))
361
+ self._parent_builder = builder
362
+
363
+ def eq(self, value: str) -> VPFilterBuilder:
364
+ super().eq(value)
365
+ return self._parent_builder
366
+
367
+ def ne(self, value: str) -> VPFilterBuilder:
368
+ super().ne(value)
369
+ return self._parent_builder
370
+
371
+ def gt(self, value: str) -> VPFilterBuilder:
372
+ super().gt(value)
373
+ return self._parent_builder
374
+
375
+ def lt(self, value: str) -> VPFilterBuilder:
376
+ super().lt(value)
377
+ return self._parent_builder
378
+
379
+ def gte(self, value: str) -> VPFilterBuilder:
380
+ super().gte(value)
381
+ return self._parent_builder
382
+
383
+ def lte(self, value: str) -> VPFilterBuilder:
384
+ super().lte(value)
385
+ return self._parent_builder
386
+
387
+ def in_(self, values: t.Sequence[str]) -> VPFilterBuilder:
388
+ super().in_(values)
389
+ return self._parent_builder
390
+
391
+ def nin(self, values: t.Sequence[str]) -> VPFilterBuilder:
392
+ super().nin(values)
393
+ return self._parent_builder
394
+
395
+ def between(self, value1: str, value2: str) -> VPFilterBuilder:
396
+ super().between(value1, value2)
397
+ return self._parent_builder
398
+
399
+ def is_null(self) -> VPFilterBuilder:
400
+ super().is_null()
401
+ return self._parent_builder
402
+
403
+ def is_not_null(self) -> VPFilterBuilder:
404
+ super().is_not_null()
405
+ return self._parent_builder
406
+
407
+ def asc(self) -> VPFilterBuilder:
408
+ super().asc()
409
+ return self._parent_builder
410
+
411
+ def desc(self) -> VPFilterBuilder:
412
+ super().desc()
413
+ return self._parent_builder
414
+
415
+ def contains(self, value: str) -> VPFilterBuilder:
416
+ super().contains(value)
417
+ return self._parent_builder
418
+
419
+ def startswith(self, value: str) -> VPFilterBuilder:
420
+ super().startswith(value)
421
+ return self._parent_builder
422
+
423
+ def endswith(self, value: str) -> VPFilterBuilder:
424
+ super().endswith(value)
425
+ return self._parent_builder
426
+
427
+ class _AudioKeyField(StringFieldFilter):
428
+ """Chainable audio_key filter with type-safe operations."""
429
+
430
+ def __init__(self, builder: VPFilterBuilder) -> None:
431
+ super().__init__("audio_key", object.__getattribute__(builder, "_filter"))
432
+ self._parent_builder = builder
433
+
434
+ def eq(self, value: str) -> VPFilterBuilder:
435
+ super().eq(value)
436
+ return self._parent_builder
437
+
438
+ def ne(self, value: str) -> VPFilterBuilder:
439
+ super().ne(value)
440
+ return self._parent_builder
441
+
442
+ def gt(self, value: str) -> VPFilterBuilder:
443
+ super().gt(value)
444
+ return self._parent_builder
445
+
446
+ def lt(self, value: str) -> VPFilterBuilder:
447
+ super().lt(value)
448
+ return self._parent_builder
449
+
450
+ def gte(self, value: str) -> VPFilterBuilder:
451
+ super().gte(value)
452
+ return self._parent_builder
453
+
454
+ def lte(self, value: str) -> VPFilterBuilder:
455
+ super().lte(value)
456
+ return self._parent_builder
457
+
458
+ def in_(self, values: t.Sequence[str]) -> VPFilterBuilder:
459
+ super().in_(values)
460
+ return self._parent_builder
461
+
462
+ def nin(self, values: t.Sequence[str]) -> VPFilterBuilder:
463
+ super().nin(values)
464
+ return self._parent_builder
465
+
466
+ def between(self, value1: str, value2: str) -> VPFilterBuilder:
467
+ super().between(value1, value2)
468
+ return self._parent_builder
469
+
470
+ def is_null(self) -> VPFilterBuilder:
471
+ super().is_null()
472
+ return self._parent_builder
473
+
474
+ def is_not_null(self) -> VPFilterBuilder:
475
+ super().is_not_null()
476
+ return self._parent_builder
477
+
478
+ def asc(self) -> VPFilterBuilder:
479
+ super().asc()
480
+ return self._parent_builder
481
+
482
+ def desc(self) -> VPFilterBuilder:
483
+ super().desc()
484
+ return self._parent_builder
485
+
486
+ def contains(self, value: str) -> VPFilterBuilder:
487
+ super().contains(value)
488
+ return self._parent_builder
489
+
490
+ def startswith(self, value: str) -> VPFilterBuilder:
491
+ super().startswith(value)
492
+ return self._parent_builder
493
+
494
+ def endswith(self, value: str) -> VPFilterBuilder:
495
+ super().endswith(value)
496
+ return self._parent_builder
497
+
498
+ class _TextContentField(StringFieldFilter):
499
+ """Chainable text_content filter with type-safe operations."""
500
+
501
+ def __init__(self, builder: VPFilterBuilder) -> None:
502
+ super().__init__("text_content", object.__getattribute__(builder, "_filter"))
503
+ self._parent_builder = builder
504
+
505
+ def eq(self, value: str) -> VPFilterBuilder:
506
+ super().eq(value)
507
+ return self._parent_builder
508
+
509
+ def ne(self, value: str) -> VPFilterBuilder:
510
+ super().ne(value)
511
+ return self._parent_builder
512
+
513
+ def gt(self, value: str) -> VPFilterBuilder:
514
+ super().gt(value)
515
+ return self._parent_builder
516
+
517
+ def lt(self, value: str) -> VPFilterBuilder:
518
+ super().lt(value)
519
+ return self._parent_builder
520
+
521
+ def gte(self, value: str) -> VPFilterBuilder:
522
+ super().gte(value)
523
+ return self._parent_builder
524
+
525
+ def lte(self, value: str) -> VPFilterBuilder:
526
+ super().lte(value)
527
+ return self._parent_builder
528
+
529
+ def in_(self, values: t.Sequence[str]) -> VPFilterBuilder:
530
+ super().in_(values)
531
+ return self._parent_builder
532
+
533
+ def nin(self, values: t.Sequence[str]) -> VPFilterBuilder:
534
+ super().nin(values)
535
+ return self._parent_builder
536
+
537
+ def between(self, value1: str, value2: str) -> VPFilterBuilder:
538
+ super().between(value1, value2)
539
+ return self._parent_builder
540
+
541
+ def is_null(self) -> VPFilterBuilder:
542
+ super().is_null()
543
+ return self._parent_builder
544
+
545
+ def is_not_null(self) -> VPFilterBuilder:
546
+ super().is_not_null()
547
+ return self._parent_builder
548
+
549
+ def asc(self) -> VPFilterBuilder:
550
+ super().asc()
551
+ return self._parent_builder
552
+
553
+ def desc(self) -> VPFilterBuilder:
554
+ super().desc()
555
+ return self._parent_builder
556
+
557
+ def contains(self, value: str) -> VPFilterBuilder:
558
+ super().contains(value)
559
+ return self._parent_builder
560
+
561
+ def startswith(self, value: str) -> VPFilterBuilder:
562
+ super().startswith(value)
563
+ return self._parent_builder
564
+
565
+ def endswith(self, value: str) -> VPFilterBuilder:
566
+ super().endswith(value)
567
+ return self._parent_builder
568
+
569
+ class _SampleRateField(FieldFilter[int]):
570
+ """Chainable sample_rate filter with type-safe operations."""
571
+
572
+ def __init__(self, builder: VPFilterBuilder) -> None:
573
+ super().__init__("sample_rate", object.__getattribute__(builder, "_filter"))
574
+ self._parent_builder = builder
575
+
576
+ def eq(self, value: int) -> VPFilterBuilder:
577
+ super().eq(value)
578
+ return self._parent_builder
579
+
580
+ def ne(self, value: int) -> VPFilterBuilder:
581
+ super().ne(value)
582
+ return self._parent_builder
583
+
584
+ def gt(self, value: int) -> VPFilterBuilder:
585
+ super().gt(value)
586
+ return self._parent_builder
587
+
588
+ def lt(self, value: int) -> VPFilterBuilder:
589
+ super().lt(value)
590
+ return self._parent_builder
591
+
592
+ def gte(self, value: int) -> VPFilterBuilder:
593
+ super().gte(value)
594
+ return self._parent_builder
595
+
596
+ def lte(self, value: int) -> VPFilterBuilder:
597
+ super().lte(value)
598
+ return self._parent_builder
599
+
600
+ def in_(self, values: t.Sequence[int]) -> VPFilterBuilder:
601
+ super().in_(values)
602
+ return self._parent_builder
603
+
604
+ def nin(self, values: t.Sequence[int]) -> VPFilterBuilder:
605
+ super().nin(values)
606
+ return self._parent_builder
607
+
608
+ def between(self, value1: int, value2: int) -> VPFilterBuilder:
609
+ super().between(value1, value2)
610
+ return self._parent_builder
611
+
612
+ def is_null(self) -> VPFilterBuilder:
613
+ super().is_null()
614
+ return self._parent_builder
615
+
616
+ def is_not_null(self) -> VPFilterBuilder:
617
+ super().is_not_null()
618
+ return self._parent_builder
619
+
620
+ def asc(self) -> VPFilterBuilder:
621
+ super().asc()
622
+ return self._parent_builder
623
+
624
+ def desc(self) -> VPFilterBuilder:
625
+ super().desc()
626
+ return self._parent_builder
627
+
628
+ class _IsActiveField(FieldFilter[bool]):
629
+ """Chainable is_active filter with type-safe operations."""
630
+
631
+ def __init__(self, builder: VPFilterBuilder) -> None:
632
+ super().__init__("is_active", object.__getattribute__(builder, "_filter"))
633
+ self._parent_builder = builder
634
+
635
+ def eq(self, value: bool) -> VPFilterBuilder:
636
+ super().eq(value)
637
+ return self._parent_builder
638
+
639
+ def ne(self, value: bool) -> VPFilterBuilder:
640
+ super().ne(value)
641
+ return self._parent_builder
642
+
643
+ def gt(self, value: bool) -> VPFilterBuilder:
644
+ super().gt(value)
645
+ return self._parent_builder
646
+
647
+ def lt(self, value: bool) -> VPFilterBuilder:
648
+ super().lt(value)
649
+ return self._parent_builder
650
+
651
+ def gte(self, value: bool) -> VPFilterBuilder:
652
+ super().gte(value)
653
+ return self._parent_builder
654
+
655
+ def lte(self, value: bool) -> VPFilterBuilder:
656
+ super().lte(value)
657
+ return self._parent_builder
658
+
659
+ def in_(self, values: t.Sequence[bool]) -> VPFilterBuilder:
660
+ super().in_(values)
661
+ return self._parent_builder
662
+
663
+ def nin(self, values: t.Sequence[bool]) -> VPFilterBuilder:
664
+ super().nin(values)
665
+ return self._parent_builder
666
+
667
+ def between(self, value1: bool, value2: bool) -> VPFilterBuilder:
668
+ super().between(value1, value2)
669
+ return self._parent_builder
670
+
671
+ def is_null(self) -> VPFilterBuilder:
672
+ super().is_null()
673
+ return self._parent_builder
674
+
675
+ def is_not_null(self) -> VPFilterBuilder:
676
+ super().is_not_null()
677
+ return self._parent_builder
678
+
679
+ def asc(self) -> VPFilterBuilder:
680
+ super().asc()
681
+ return self._parent_builder
682
+
683
+ def desc(self) -> VPFilterBuilder:
684
+ super().desc()
685
+ return self._parent_builder
686
+
687
+ def and_(self, *filters: Filter) -> Filter:
688
+ """Combine with other filters using AND logic.
689
+
690
+ Args:
691
+ *filters: Other filters to combine with AND.
692
+
693
+ Returns:
694
+ Combined filter with AND logic.
695
+
696
+ Example:
697
+ ```python
698
+ # username = 'john' AND email = 'john@ex.com'
699
+ filter = (
700
+ vp_filter()
701
+ .username.eq("john")
702
+ .and_(vp_filter().email.eq("john@ex.com"))
703
+ )
704
+ ```
705
+ """
706
+ return object.__getattribute__(self, "_filter").and_(*filters)
707
+
708
+ def or_(self, *filters: Filter) -> Filter:
709
+ """Combine with other filters using OR logic.
710
+
711
+ Args:
712
+ *filters: Other filters to combine with OR.
713
+
714
+ Returns:
715
+ Combined filter with OR logic.
716
+
717
+ Example:
718
+ ```python
719
+ # username = 'john' OR email = 'john@ex.com'
720
+ filter = (
721
+ vp_filter()
722
+ .username.eq("john")
723
+ .or_(vp_filter().email.eq("john@ex.com"))
724
+ )
725
+ ```
726
+ """
727
+ return object.__getattribute__(self, "_filter").or_(*filters)
728
+
729
+ def not_(self) -> Filter:
730
+ """Negate the current filter.
731
+
732
+ Returns:
733
+ Negated filter.
734
+
735
+ Example:
736
+ ```python
737
+ # NOT (username = 'john')
738
+ filter = vp_filter().username.eq("john").not_()
739
+ ```
740
+ """
741
+ return object.__getattribute__(self, "_filter").not_()
742
+
743
+ # Field properties
744
+
745
+ @property
746
+ def id(self) -> _IdField:
747
+ """Filter by id field."""
748
+ return self._IdField(self)
749
+
750
+ @property
751
+ def created_at(self) -> _CreatedAtField:
752
+ """Filter by created_at field."""
753
+ return self._CreatedAtField(self)
754
+
755
+ @property
756
+ def updated_at(self) -> _UpdatedAtField:
757
+ """Filter by updated_at field."""
758
+ return self._UpdatedAtField(self)
759
+
760
+ @property
761
+ def doctor_id(self) -> _DoctorIdField:
762
+ """Filter by doctor_id field."""
763
+ return self._DoctorIdField(self)
764
+
765
+ @property
766
+ def vpr_uid(self) -> _VprUidField:
767
+ """Filter by vpr_uid field."""
768
+ return self._VprUidField(self)
769
+
770
+ @property
771
+ def vpr_group_id(self) -> _VprGroupIdField:
772
+ """Filter by vpr_group_id field."""
773
+ return self._VprGroupIdField(self)
774
+
775
+ @property
776
+ def audio_key(self) -> _AudioKeyField:
777
+ """Filter by audio_key field."""
778
+ return self._AudioKeyField(self)
779
+
780
+ @property
781
+ def text_content(self) -> _TextContentField:
782
+ """Filter by text_content field."""
783
+ return self._TextContentField(self)
784
+
785
+ @property
786
+ def sample_rate(self) -> _SampleRateField:
787
+ """Filter by sample_rate field."""
788
+ return self._SampleRateField(self)
789
+
790
+ @property
791
+ def is_active(self) -> _IsActiveField:
792
+ """Filter by is_active field."""
793
+ return self._IsActiveField(self)
794
+
795
+
796
+ def vp_filter() -> VPFilterBuilder:
797
+ """Create a VP filter builder with full type safety.
798
+
799
+ Returns:
800
+ A VPFilterBuilder instance with full IDE support and chainable fields.
801
+
802
+ Example:
803
+ ```python
804
+ # AND conditions (chained)
805
+ filter = (
806
+ vp_filter().field1.eq(value1).field2.contains(value2)
807
+ )
808
+
809
+ # OR conditions
810
+ filter = vp_filter().field1.eq(
811
+ value1
812
+ ) | vp_filter().field2.eq(value2)
813
+ ```
814
+ """
815
+ return VPFilterBuilder(VP)