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,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)
|