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