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.
- audex/__init__.py +9 -0
- audex/__main__.py +7 -0
- audex/cli/__init__.py +189 -0
- audex/cli/apis/__init__.py +12 -0
- audex/cli/apis/init/__init__.py +34 -0
- audex/cli/apis/init/gencfg.py +130 -0
- audex/cli/apis/init/setup.py +330 -0
- audex/cli/apis/init/vprgroup.py +125 -0
- audex/cli/apis/serve.py +141 -0
- audex/cli/args.py +356 -0
- audex/cli/exceptions.py +44 -0
- audex/cli/helper/__init__.py +0 -0
- audex/cli/helper/ansi.py +193 -0
- audex/cli/helper/display.py +288 -0
- audex/config/__init__.py +64 -0
- audex/config/core/__init__.py +30 -0
- audex/config/core/app.py +29 -0
- audex/config/core/audio.py +45 -0
- audex/config/core/logging.py +163 -0
- audex/config/core/session.py +11 -0
- audex/config/helper/__init__.py +1 -0
- audex/config/helper/client/__init__.py +1 -0
- audex/config/helper/client/http.py +28 -0
- audex/config/helper/client/websocket.py +21 -0
- audex/config/helper/provider/__init__.py +1 -0
- audex/config/helper/provider/dashscope.py +13 -0
- audex/config/helper/provider/unisound.py +18 -0
- audex/config/helper/provider/xfyun.py +23 -0
- audex/config/infrastructure/__init__.py +31 -0
- audex/config/infrastructure/cache.py +51 -0
- audex/config/infrastructure/database.py +48 -0
- audex/config/infrastructure/recorder.py +32 -0
- audex/config/infrastructure/store.py +19 -0
- audex/config/provider/__init__.py +18 -0
- audex/config/provider/transcription.py +109 -0
- audex/config/provider/vpr.py +99 -0
- audex/container.py +40 -0
- audex/entity/__init__.py +468 -0
- audex/entity/doctor.py +109 -0
- audex/entity/doctor.pyi +51 -0
- audex/entity/fields.py +401 -0
- audex/entity/segment.py +115 -0
- audex/entity/segment.pyi +38 -0
- audex/entity/session.py +133 -0
- audex/entity/session.pyi +47 -0
- audex/entity/utterance.py +142 -0
- audex/entity/utterance.pyi +48 -0
- audex/entity/vp.py +68 -0
- audex/entity/vp.pyi +35 -0
- audex/exceptions.py +157 -0
- audex/filters/__init__.py +692 -0
- audex/filters/generated/__init__.py +21 -0
- audex/filters/generated/doctor.py +987 -0
- audex/filters/generated/segment.py +723 -0
- audex/filters/generated/session.py +978 -0
- audex/filters/generated/utterance.py +939 -0
- audex/filters/generated/vp.py +815 -0
- audex/helper/__init__.py +1 -0
- audex/helper/hash.py +33 -0
- audex/helper/mixin.py +65 -0
- audex/helper/net.py +19 -0
- audex/helper/settings/__init__.py +830 -0
- audex/helper/settings/fields.py +317 -0
- audex/helper/stream.py +153 -0
- audex/injectors/__init__.py +1 -0
- audex/injectors/config.py +12 -0
- audex/injectors/lifespan.py +7 -0
- audex/lib/__init__.py +1 -0
- audex/lib/cache/__init__.py +383 -0
- audex/lib/cache/inmemory.py +513 -0
- audex/lib/database/__init__.py +83 -0
- audex/lib/database/sqlite.py +406 -0
- audex/lib/exporter.py +189 -0
- audex/lib/injectors/__init__.py +1 -0
- audex/lib/injectors/cache.py +25 -0
- audex/lib/injectors/container.py +47 -0
- audex/lib/injectors/exporter.py +26 -0
- audex/lib/injectors/recorder.py +33 -0
- audex/lib/injectors/server.py +17 -0
- audex/lib/injectors/session.py +18 -0
- audex/lib/injectors/sqlite.py +24 -0
- audex/lib/injectors/store.py +13 -0
- audex/lib/injectors/transcription.py +42 -0
- audex/lib/injectors/usb.py +12 -0
- audex/lib/injectors/vpr.py +65 -0
- audex/lib/injectors/wifi.py +7 -0
- audex/lib/recorder.py +844 -0
- audex/lib/repos/__init__.py +149 -0
- audex/lib/repos/container.py +23 -0
- audex/lib/repos/database/__init__.py +1 -0
- audex/lib/repos/database/sqlite.py +672 -0
- audex/lib/repos/decorators.py +74 -0
- audex/lib/repos/doctor.py +286 -0
- audex/lib/repos/segment.py +302 -0
- audex/lib/repos/session.py +285 -0
- audex/lib/repos/tables/__init__.py +70 -0
- audex/lib/repos/tables/doctor.py +137 -0
- audex/lib/repos/tables/segment.py +113 -0
- audex/lib/repos/tables/session.py +140 -0
- audex/lib/repos/tables/utterance.py +131 -0
- audex/lib/repos/tables/vp.py +102 -0
- audex/lib/repos/utterance.py +288 -0
- audex/lib/repos/vp.py +286 -0
- audex/lib/restful.py +251 -0
- audex/lib/server/__init__.py +97 -0
- audex/lib/server/auth.py +98 -0
- audex/lib/server/handlers.py +248 -0
- audex/lib/server/templates/index.html.j2 +226 -0
- audex/lib/server/templates/login.html.j2 +111 -0
- audex/lib/server/templates/static/script.js +68 -0
- audex/lib/server/templates/static/style.css +579 -0
- audex/lib/server/types.py +123 -0
- audex/lib/session.py +503 -0
- audex/lib/store/__init__.py +238 -0
- audex/lib/store/localfile.py +411 -0
- audex/lib/transcription/__init__.py +33 -0
- audex/lib/transcription/dashscope.py +525 -0
- audex/lib/transcription/events.py +62 -0
- audex/lib/usb.py +554 -0
- audex/lib/vpr/__init__.py +38 -0
- audex/lib/vpr/unisound/__init__.py +185 -0
- audex/lib/vpr/unisound/types.py +469 -0
- audex/lib/vpr/xfyun/__init__.py +483 -0
- audex/lib/vpr/xfyun/types.py +679 -0
- audex/lib/websocket/__init__.py +8 -0
- audex/lib/websocket/connection.py +485 -0
- audex/lib/websocket/pool.py +991 -0
- audex/lib/wifi.py +1146 -0
- audex/lifespan.py +75 -0
- audex/service/__init__.py +27 -0
- audex/service/decorators.py +73 -0
- audex/service/doctor/__init__.py +652 -0
- audex/service/doctor/const.py +36 -0
- audex/service/doctor/exceptions.py +96 -0
- audex/service/doctor/types.py +54 -0
- audex/service/export/__init__.py +236 -0
- audex/service/export/const.py +17 -0
- audex/service/export/exceptions.py +34 -0
- audex/service/export/types.py +21 -0
- audex/service/injectors/__init__.py +1 -0
- audex/service/injectors/container.py +53 -0
- audex/service/injectors/doctor.py +34 -0
- audex/service/injectors/export.py +27 -0
- audex/service/injectors/session.py +49 -0
- audex/service/session/__init__.py +754 -0
- audex/service/session/const.py +34 -0
- audex/service/session/exceptions.py +67 -0
- audex/service/session/types.py +91 -0
- audex/types.py +39 -0
- audex/utils.py +287 -0
- audex/valueobj/__init__.py +81 -0
- audex/valueobj/common/__init__.py +1 -0
- audex/valueobj/common/auth.py +84 -0
- audex/valueobj/common/email.py +16 -0
- audex/valueobj/common/ops.py +22 -0
- audex/valueobj/common/phone.py +84 -0
- audex/valueobj/common/version.py +72 -0
- audex/valueobj/session.py +19 -0
- audex/valueobj/utterance.py +15 -0
- audex/view/__init__.py +51 -0
- audex/view/container.py +17 -0
- audex/view/decorators.py +303 -0
- audex/view/pages/__init__.py +1 -0
- audex/view/pages/dashboard/__init__.py +286 -0
- audex/view/pages/dashboard/wifi.py +407 -0
- audex/view/pages/login.py +110 -0
- audex/view/pages/recording.py +348 -0
- audex/view/pages/register.py +202 -0
- audex/view/pages/sessions/__init__.py +196 -0
- audex/view/pages/sessions/details.py +224 -0
- audex/view/pages/sessions/export.py +443 -0
- audex/view/pages/settings.py +374 -0
- audex/view/pages/voiceprint/__init__.py +1 -0
- audex/view/pages/voiceprint/enroll.py +195 -0
- audex/view/pages/voiceprint/update.py +195 -0
- audex/view/static/css/dashboard.css +452 -0
- audex/view/static/css/glass.css +22 -0
- audex/view/static/css/global.css +541 -0
- audex/view/static/css/login.css +386 -0
- audex/view/static/css/recording.css +439 -0
- audex/view/static/css/register.css +293 -0
- audex/view/static/css/sessions/styles.css +501 -0
- audex/view/static/css/settings.css +186 -0
- audex/view/static/css/voiceprint/enroll.css +43 -0
- audex/view/static/css/voiceprint/styles.css +209 -0
- audex/view/static/css/voiceprint/update.css +44 -0
- audex/view/static/images/logo.svg +95 -0
- audex/view/static/js/recording.js +42 -0
- audex-1.0.7a3.dist-info/METADATA +361 -0
- audex-1.0.7a3.dist-info/RECORD +192 -0
- audex-1.0.7a3.dist-info/WHEEL +4 -0
- 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)
|