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,987 @@
|
|
|
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.doctor import Doctor
|
|
11
|
+
from audex.filters import FieldFilter
|
|
12
|
+
from audex.filters import Filter
|
|
13
|
+
from audex.filters import FilterBuilder
|
|
14
|
+
from audex.filters import StringBackedFieldFilter
|
|
15
|
+
from audex.filters import StringFieldFilter
|
|
16
|
+
from audex.valueobj.common.auth import HashedPassword
|
|
17
|
+
from audex.valueobj.common.email import Email
|
|
18
|
+
from audex.valueobj.common.phone import CNPhone
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class DoctorFilterBuilder(FilterBuilder[Doctor]):
|
|
22
|
+
"""Doctor filter builder with full type hints and IDE support.
|
|
23
|
+
|
|
24
|
+
This class is auto-generated. Do not edit manually.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
class _IdField(StringFieldFilter):
|
|
28
|
+
"""Chainable id filter with type-safe operations."""
|
|
29
|
+
|
|
30
|
+
def __init__(self, builder: DoctorFilterBuilder) -> None:
|
|
31
|
+
super().__init__("id", object.__getattribute__(builder, "_filter"))
|
|
32
|
+
self._parent_builder = builder
|
|
33
|
+
|
|
34
|
+
def eq(self, value: str) -> DoctorFilterBuilder:
|
|
35
|
+
super().eq(value)
|
|
36
|
+
return self._parent_builder
|
|
37
|
+
|
|
38
|
+
def ne(self, value: str) -> DoctorFilterBuilder:
|
|
39
|
+
super().ne(value)
|
|
40
|
+
return self._parent_builder
|
|
41
|
+
|
|
42
|
+
def gt(self, value: str) -> DoctorFilterBuilder:
|
|
43
|
+
super().gt(value)
|
|
44
|
+
return self._parent_builder
|
|
45
|
+
|
|
46
|
+
def lt(self, value: str) -> DoctorFilterBuilder:
|
|
47
|
+
super().lt(value)
|
|
48
|
+
return self._parent_builder
|
|
49
|
+
|
|
50
|
+
def gte(self, value: str) -> DoctorFilterBuilder:
|
|
51
|
+
super().gte(value)
|
|
52
|
+
return self._parent_builder
|
|
53
|
+
|
|
54
|
+
def lte(self, value: str) -> DoctorFilterBuilder:
|
|
55
|
+
super().lte(value)
|
|
56
|
+
return self._parent_builder
|
|
57
|
+
|
|
58
|
+
def in_(self, values: t.Sequence[str]) -> DoctorFilterBuilder:
|
|
59
|
+
super().in_(values)
|
|
60
|
+
return self._parent_builder
|
|
61
|
+
|
|
62
|
+
def nin(self, values: t.Sequence[str]) -> DoctorFilterBuilder:
|
|
63
|
+
super().nin(values)
|
|
64
|
+
return self._parent_builder
|
|
65
|
+
|
|
66
|
+
def between(self, value1: str, value2: str) -> DoctorFilterBuilder:
|
|
67
|
+
super().between(value1, value2)
|
|
68
|
+
return self._parent_builder
|
|
69
|
+
|
|
70
|
+
def is_null(self) -> DoctorFilterBuilder:
|
|
71
|
+
super().is_null()
|
|
72
|
+
return self._parent_builder
|
|
73
|
+
|
|
74
|
+
def is_not_null(self) -> DoctorFilterBuilder:
|
|
75
|
+
super().is_not_null()
|
|
76
|
+
return self._parent_builder
|
|
77
|
+
|
|
78
|
+
def asc(self) -> DoctorFilterBuilder:
|
|
79
|
+
super().asc()
|
|
80
|
+
return self._parent_builder
|
|
81
|
+
|
|
82
|
+
def desc(self) -> DoctorFilterBuilder:
|
|
83
|
+
super().desc()
|
|
84
|
+
return self._parent_builder
|
|
85
|
+
|
|
86
|
+
def contains(self, value: str) -> DoctorFilterBuilder:
|
|
87
|
+
super().contains(value)
|
|
88
|
+
return self._parent_builder
|
|
89
|
+
|
|
90
|
+
def startswith(self, value: str) -> DoctorFilterBuilder:
|
|
91
|
+
super().startswith(value)
|
|
92
|
+
return self._parent_builder
|
|
93
|
+
|
|
94
|
+
def endswith(self, value: str) -> DoctorFilterBuilder:
|
|
95
|
+
super().endswith(value)
|
|
96
|
+
return self._parent_builder
|
|
97
|
+
|
|
98
|
+
class _CreatedAtField(FieldFilter[datetime.datetime]):
|
|
99
|
+
"""Chainable created_at filter with type-safe operations."""
|
|
100
|
+
|
|
101
|
+
def __init__(self, builder: DoctorFilterBuilder) -> None:
|
|
102
|
+
super().__init__("created_at", object.__getattribute__(builder, "_filter"))
|
|
103
|
+
self._parent_builder = builder
|
|
104
|
+
|
|
105
|
+
def eq(self, value: datetime.datetime) -> DoctorFilterBuilder:
|
|
106
|
+
super().eq(value)
|
|
107
|
+
return self._parent_builder
|
|
108
|
+
|
|
109
|
+
def ne(self, value: datetime.datetime) -> DoctorFilterBuilder:
|
|
110
|
+
super().ne(value)
|
|
111
|
+
return self._parent_builder
|
|
112
|
+
|
|
113
|
+
def gt(self, value: datetime.datetime) -> DoctorFilterBuilder:
|
|
114
|
+
super().gt(value)
|
|
115
|
+
return self._parent_builder
|
|
116
|
+
|
|
117
|
+
def lt(self, value: datetime.datetime) -> DoctorFilterBuilder:
|
|
118
|
+
super().lt(value)
|
|
119
|
+
return self._parent_builder
|
|
120
|
+
|
|
121
|
+
def gte(self, value: datetime.datetime) -> DoctorFilterBuilder:
|
|
122
|
+
super().gte(value)
|
|
123
|
+
return self._parent_builder
|
|
124
|
+
|
|
125
|
+
def lte(self, value: datetime.datetime) -> DoctorFilterBuilder:
|
|
126
|
+
super().lte(value)
|
|
127
|
+
return self._parent_builder
|
|
128
|
+
|
|
129
|
+
def in_(self, values: t.Sequence[datetime.datetime]) -> DoctorFilterBuilder:
|
|
130
|
+
super().in_(values)
|
|
131
|
+
return self._parent_builder
|
|
132
|
+
|
|
133
|
+
def nin(self, values: t.Sequence[datetime.datetime]) -> DoctorFilterBuilder:
|
|
134
|
+
super().nin(values)
|
|
135
|
+
return self._parent_builder
|
|
136
|
+
|
|
137
|
+
def between(
|
|
138
|
+
self, value1: datetime.datetime, value2: datetime.datetime
|
|
139
|
+
) -> DoctorFilterBuilder:
|
|
140
|
+
super().between(value1, value2)
|
|
141
|
+
return self._parent_builder
|
|
142
|
+
|
|
143
|
+
def is_null(self) -> DoctorFilterBuilder:
|
|
144
|
+
super().is_null()
|
|
145
|
+
return self._parent_builder
|
|
146
|
+
|
|
147
|
+
def is_not_null(self) -> DoctorFilterBuilder:
|
|
148
|
+
super().is_not_null()
|
|
149
|
+
return self._parent_builder
|
|
150
|
+
|
|
151
|
+
def asc(self) -> DoctorFilterBuilder:
|
|
152
|
+
super().asc()
|
|
153
|
+
return self._parent_builder
|
|
154
|
+
|
|
155
|
+
def desc(self) -> DoctorFilterBuilder:
|
|
156
|
+
super().desc()
|
|
157
|
+
return self._parent_builder
|
|
158
|
+
|
|
159
|
+
class _UpdatedAtField(FieldFilter[datetime.datetime | None]):
|
|
160
|
+
"""Chainable updated_at filter with type-safe operations."""
|
|
161
|
+
|
|
162
|
+
def __init__(self, builder: DoctorFilterBuilder) -> None:
|
|
163
|
+
super().__init__("updated_at", object.__getattribute__(builder, "_filter"))
|
|
164
|
+
self._parent_builder = builder
|
|
165
|
+
|
|
166
|
+
def eq(self, value: datetime.datetime | None) -> DoctorFilterBuilder:
|
|
167
|
+
super().eq(value)
|
|
168
|
+
return self._parent_builder
|
|
169
|
+
|
|
170
|
+
def ne(self, value: datetime.datetime | None) -> DoctorFilterBuilder:
|
|
171
|
+
super().ne(value)
|
|
172
|
+
return self._parent_builder
|
|
173
|
+
|
|
174
|
+
def gt(self, value: datetime.datetime | None) -> DoctorFilterBuilder:
|
|
175
|
+
super().gt(value)
|
|
176
|
+
return self._parent_builder
|
|
177
|
+
|
|
178
|
+
def lt(self, value: datetime.datetime | None) -> DoctorFilterBuilder:
|
|
179
|
+
super().lt(value)
|
|
180
|
+
return self._parent_builder
|
|
181
|
+
|
|
182
|
+
def gte(self, value: datetime.datetime | None) -> DoctorFilterBuilder:
|
|
183
|
+
super().gte(value)
|
|
184
|
+
return self._parent_builder
|
|
185
|
+
|
|
186
|
+
def lte(self, value: datetime.datetime | None) -> DoctorFilterBuilder:
|
|
187
|
+
super().lte(value)
|
|
188
|
+
return self._parent_builder
|
|
189
|
+
|
|
190
|
+
def in_(self, values: t.Sequence[datetime.datetime | None]) -> DoctorFilterBuilder:
|
|
191
|
+
super().in_(values)
|
|
192
|
+
return self._parent_builder
|
|
193
|
+
|
|
194
|
+
def nin(self, values: t.Sequence[datetime.datetime | None]) -> DoctorFilterBuilder:
|
|
195
|
+
super().nin(values)
|
|
196
|
+
return self._parent_builder
|
|
197
|
+
|
|
198
|
+
def between(
|
|
199
|
+
self, value1: datetime.datetime | None, value2: datetime.datetime | None
|
|
200
|
+
) -> DoctorFilterBuilder:
|
|
201
|
+
super().between(value1, value2)
|
|
202
|
+
return self._parent_builder
|
|
203
|
+
|
|
204
|
+
def is_null(self) -> DoctorFilterBuilder:
|
|
205
|
+
super().is_null()
|
|
206
|
+
return self._parent_builder
|
|
207
|
+
|
|
208
|
+
def is_not_null(self) -> DoctorFilterBuilder:
|
|
209
|
+
super().is_not_null()
|
|
210
|
+
return self._parent_builder
|
|
211
|
+
|
|
212
|
+
def asc(self) -> DoctorFilterBuilder:
|
|
213
|
+
super().asc()
|
|
214
|
+
return self._parent_builder
|
|
215
|
+
|
|
216
|
+
def desc(self) -> DoctorFilterBuilder:
|
|
217
|
+
super().desc()
|
|
218
|
+
return self._parent_builder
|
|
219
|
+
|
|
220
|
+
class _EidField(StringFieldFilter):
|
|
221
|
+
"""Chainable eid filter with type-safe operations."""
|
|
222
|
+
|
|
223
|
+
def __init__(self, builder: DoctorFilterBuilder) -> None:
|
|
224
|
+
super().__init__("eid", object.__getattribute__(builder, "_filter"))
|
|
225
|
+
self._parent_builder = builder
|
|
226
|
+
|
|
227
|
+
def eq(self, value: str) -> DoctorFilterBuilder:
|
|
228
|
+
super().eq(value)
|
|
229
|
+
return self._parent_builder
|
|
230
|
+
|
|
231
|
+
def ne(self, value: str) -> DoctorFilterBuilder:
|
|
232
|
+
super().ne(value)
|
|
233
|
+
return self._parent_builder
|
|
234
|
+
|
|
235
|
+
def gt(self, value: str) -> DoctorFilterBuilder:
|
|
236
|
+
super().gt(value)
|
|
237
|
+
return self._parent_builder
|
|
238
|
+
|
|
239
|
+
def lt(self, value: str) -> DoctorFilterBuilder:
|
|
240
|
+
super().lt(value)
|
|
241
|
+
return self._parent_builder
|
|
242
|
+
|
|
243
|
+
def gte(self, value: str) -> DoctorFilterBuilder:
|
|
244
|
+
super().gte(value)
|
|
245
|
+
return self._parent_builder
|
|
246
|
+
|
|
247
|
+
def lte(self, value: str) -> DoctorFilterBuilder:
|
|
248
|
+
super().lte(value)
|
|
249
|
+
return self._parent_builder
|
|
250
|
+
|
|
251
|
+
def in_(self, values: t.Sequence[str]) -> DoctorFilterBuilder:
|
|
252
|
+
super().in_(values)
|
|
253
|
+
return self._parent_builder
|
|
254
|
+
|
|
255
|
+
def nin(self, values: t.Sequence[str]) -> DoctorFilterBuilder:
|
|
256
|
+
super().nin(values)
|
|
257
|
+
return self._parent_builder
|
|
258
|
+
|
|
259
|
+
def between(self, value1: str, value2: str) -> DoctorFilterBuilder:
|
|
260
|
+
super().between(value1, value2)
|
|
261
|
+
return self._parent_builder
|
|
262
|
+
|
|
263
|
+
def is_null(self) -> DoctorFilterBuilder:
|
|
264
|
+
super().is_null()
|
|
265
|
+
return self._parent_builder
|
|
266
|
+
|
|
267
|
+
def is_not_null(self) -> DoctorFilterBuilder:
|
|
268
|
+
super().is_not_null()
|
|
269
|
+
return self._parent_builder
|
|
270
|
+
|
|
271
|
+
def asc(self) -> DoctorFilterBuilder:
|
|
272
|
+
super().asc()
|
|
273
|
+
return self._parent_builder
|
|
274
|
+
|
|
275
|
+
def desc(self) -> DoctorFilterBuilder:
|
|
276
|
+
super().desc()
|
|
277
|
+
return self._parent_builder
|
|
278
|
+
|
|
279
|
+
def contains(self, value: str) -> DoctorFilterBuilder:
|
|
280
|
+
super().contains(value)
|
|
281
|
+
return self._parent_builder
|
|
282
|
+
|
|
283
|
+
def startswith(self, value: str) -> DoctorFilterBuilder:
|
|
284
|
+
super().startswith(value)
|
|
285
|
+
return self._parent_builder
|
|
286
|
+
|
|
287
|
+
def endswith(self, value: str) -> DoctorFilterBuilder:
|
|
288
|
+
super().endswith(value)
|
|
289
|
+
return self._parent_builder
|
|
290
|
+
|
|
291
|
+
class _PasswordHashField(StringBackedFieldFilter[HashedPassword]):
|
|
292
|
+
"""Chainable password_hash filter with type-safe operations."""
|
|
293
|
+
|
|
294
|
+
def __init__(self, builder: DoctorFilterBuilder) -> None:
|
|
295
|
+
super().__init__("password_hash", object.__getattribute__(builder, "_filter"))
|
|
296
|
+
self._parent_builder = builder
|
|
297
|
+
|
|
298
|
+
def eq(self, value: HashedPassword) -> DoctorFilterBuilder:
|
|
299
|
+
super().eq(value)
|
|
300
|
+
return self._parent_builder
|
|
301
|
+
|
|
302
|
+
def ne(self, value: HashedPassword) -> DoctorFilterBuilder:
|
|
303
|
+
super().ne(value)
|
|
304
|
+
return self._parent_builder
|
|
305
|
+
|
|
306
|
+
def gt(self, value: HashedPassword) -> DoctorFilterBuilder:
|
|
307
|
+
super().gt(value)
|
|
308
|
+
return self._parent_builder
|
|
309
|
+
|
|
310
|
+
def lt(self, value: HashedPassword) -> DoctorFilterBuilder:
|
|
311
|
+
super().lt(value)
|
|
312
|
+
return self._parent_builder
|
|
313
|
+
|
|
314
|
+
def gte(self, value: HashedPassword) -> DoctorFilterBuilder:
|
|
315
|
+
super().gte(value)
|
|
316
|
+
return self._parent_builder
|
|
317
|
+
|
|
318
|
+
def lte(self, value: HashedPassword) -> DoctorFilterBuilder:
|
|
319
|
+
super().lte(value)
|
|
320
|
+
return self._parent_builder
|
|
321
|
+
|
|
322
|
+
def in_(self, values: t.Sequence[HashedPassword]) -> DoctorFilterBuilder:
|
|
323
|
+
super().in_(values)
|
|
324
|
+
return self._parent_builder
|
|
325
|
+
|
|
326
|
+
def nin(self, values: t.Sequence[HashedPassword]) -> DoctorFilterBuilder:
|
|
327
|
+
super().nin(values)
|
|
328
|
+
return self._parent_builder
|
|
329
|
+
|
|
330
|
+
def between(self, value1: HashedPassword, value2: HashedPassword) -> DoctorFilterBuilder:
|
|
331
|
+
super().between(value1, value2)
|
|
332
|
+
return self._parent_builder
|
|
333
|
+
|
|
334
|
+
def is_null(self) -> DoctorFilterBuilder:
|
|
335
|
+
super().is_null()
|
|
336
|
+
return self._parent_builder
|
|
337
|
+
|
|
338
|
+
def is_not_null(self) -> DoctorFilterBuilder:
|
|
339
|
+
super().is_not_null()
|
|
340
|
+
return self._parent_builder
|
|
341
|
+
|
|
342
|
+
def asc(self) -> DoctorFilterBuilder:
|
|
343
|
+
super().asc()
|
|
344
|
+
return self._parent_builder
|
|
345
|
+
|
|
346
|
+
def desc(self) -> DoctorFilterBuilder:
|
|
347
|
+
super().desc()
|
|
348
|
+
return self._parent_builder
|
|
349
|
+
|
|
350
|
+
def contains(self, value: str) -> DoctorFilterBuilder:
|
|
351
|
+
super().contains(value)
|
|
352
|
+
return self._parent_builder
|
|
353
|
+
|
|
354
|
+
def startswith(self, value: str) -> DoctorFilterBuilder:
|
|
355
|
+
super().startswith(value)
|
|
356
|
+
return self._parent_builder
|
|
357
|
+
|
|
358
|
+
def endswith(self, value: str) -> DoctorFilterBuilder:
|
|
359
|
+
super().endswith(value)
|
|
360
|
+
return self._parent_builder
|
|
361
|
+
|
|
362
|
+
class _NameField(StringFieldFilter):
|
|
363
|
+
"""Chainable name filter with type-safe operations."""
|
|
364
|
+
|
|
365
|
+
def __init__(self, builder: DoctorFilterBuilder) -> None:
|
|
366
|
+
super().__init__("name", object.__getattribute__(builder, "_filter"))
|
|
367
|
+
self._parent_builder = builder
|
|
368
|
+
|
|
369
|
+
def eq(self, value: str) -> DoctorFilterBuilder:
|
|
370
|
+
super().eq(value)
|
|
371
|
+
return self._parent_builder
|
|
372
|
+
|
|
373
|
+
def ne(self, value: str) -> DoctorFilterBuilder:
|
|
374
|
+
super().ne(value)
|
|
375
|
+
return self._parent_builder
|
|
376
|
+
|
|
377
|
+
def gt(self, value: str) -> DoctorFilterBuilder:
|
|
378
|
+
super().gt(value)
|
|
379
|
+
return self._parent_builder
|
|
380
|
+
|
|
381
|
+
def lt(self, value: str) -> DoctorFilterBuilder:
|
|
382
|
+
super().lt(value)
|
|
383
|
+
return self._parent_builder
|
|
384
|
+
|
|
385
|
+
def gte(self, value: str) -> DoctorFilterBuilder:
|
|
386
|
+
super().gte(value)
|
|
387
|
+
return self._parent_builder
|
|
388
|
+
|
|
389
|
+
def lte(self, value: str) -> DoctorFilterBuilder:
|
|
390
|
+
super().lte(value)
|
|
391
|
+
return self._parent_builder
|
|
392
|
+
|
|
393
|
+
def in_(self, values: t.Sequence[str]) -> DoctorFilterBuilder:
|
|
394
|
+
super().in_(values)
|
|
395
|
+
return self._parent_builder
|
|
396
|
+
|
|
397
|
+
def nin(self, values: t.Sequence[str]) -> DoctorFilterBuilder:
|
|
398
|
+
super().nin(values)
|
|
399
|
+
return self._parent_builder
|
|
400
|
+
|
|
401
|
+
def between(self, value1: str, value2: str) -> DoctorFilterBuilder:
|
|
402
|
+
super().between(value1, value2)
|
|
403
|
+
return self._parent_builder
|
|
404
|
+
|
|
405
|
+
def is_null(self) -> DoctorFilterBuilder:
|
|
406
|
+
super().is_null()
|
|
407
|
+
return self._parent_builder
|
|
408
|
+
|
|
409
|
+
def is_not_null(self) -> DoctorFilterBuilder:
|
|
410
|
+
super().is_not_null()
|
|
411
|
+
return self._parent_builder
|
|
412
|
+
|
|
413
|
+
def asc(self) -> DoctorFilterBuilder:
|
|
414
|
+
super().asc()
|
|
415
|
+
return self._parent_builder
|
|
416
|
+
|
|
417
|
+
def desc(self) -> DoctorFilterBuilder:
|
|
418
|
+
super().desc()
|
|
419
|
+
return self._parent_builder
|
|
420
|
+
|
|
421
|
+
def contains(self, value: str) -> DoctorFilterBuilder:
|
|
422
|
+
super().contains(value)
|
|
423
|
+
return self._parent_builder
|
|
424
|
+
|
|
425
|
+
def startswith(self, value: str) -> DoctorFilterBuilder:
|
|
426
|
+
super().startswith(value)
|
|
427
|
+
return self._parent_builder
|
|
428
|
+
|
|
429
|
+
def endswith(self, value: str) -> DoctorFilterBuilder:
|
|
430
|
+
super().endswith(value)
|
|
431
|
+
return self._parent_builder
|
|
432
|
+
|
|
433
|
+
class _DepartmentField(StringFieldFilter):
|
|
434
|
+
"""Chainable department filter with type-safe operations."""
|
|
435
|
+
|
|
436
|
+
def __init__(self, builder: DoctorFilterBuilder) -> None:
|
|
437
|
+
super().__init__("department", object.__getattribute__(builder, "_filter"))
|
|
438
|
+
self._parent_builder = builder
|
|
439
|
+
|
|
440
|
+
def eq(self, value: str | None) -> DoctorFilterBuilder:
|
|
441
|
+
super().eq(value)
|
|
442
|
+
return self._parent_builder
|
|
443
|
+
|
|
444
|
+
def ne(self, value: str | None) -> DoctorFilterBuilder:
|
|
445
|
+
super().ne(value)
|
|
446
|
+
return self._parent_builder
|
|
447
|
+
|
|
448
|
+
def gt(self, value: str | None) -> DoctorFilterBuilder:
|
|
449
|
+
super().gt(value)
|
|
450
|
+
return self._parent_builder
|
|
451
|
+
|
|
452
|
+
def lt(self, value: str | None) -> DoctorFilterBuilder:
|
|
453
|
+
super().lt(value)
|
|
454
|
+
return self._parent_builder
|
|
455
|
+
|
|
456
|
+
def gte(self, value: str | None) -> DoctorFilterBuilder:
|
|
457
|
+
super().gte(value)
|
|
458
|
+
return self._parent_builder
|
|
459
|
+
|
|
460
|
+
def lte(self, value: str | None) -> DoctorFilterBuilder:
|
|
461
|
+
super().lte(value)
|
|
462
|
+
return self._parent_builder
|
|
463
|
+
|
|
464
|
+
def in_(self, values: t.Sequence[str | None]) -> DoctorFilterBuilder:
|
|
465
|
+
super().in_(values)
|
|
466
|
+
return self._parent_builder
|
|
467
|
+
|
|
468
|
+
def nin(self, values: t.Sequence[str | None]) -> DoctorFilterBuilder:
|
|
469
|
+
super().nin(values)
|
|
470
|
+
return self._parent_builder
|
|
471
|
+
|
|
472
|
+
def between(self, value1: str | None, value2: str | None) -> DoctorFilterBuilder:
|
|
473
|
+
super().between(value1, value2)
|
|
474
|
+
return self._parent_builder
|
|
475
|
+
|
|
476
|
+
def is_null(self) -> DoctorFilterBuilder:
|
|
477
|
+
super().is_null()
|
|
478
|
+
return self._parent_builder
|
|
479
|
+
|
|
480
|
+
def is_not_null(self) -> DoctorFilterBuilder:
|
|
481
|
+
super().is_not_null()
|
|
482
|
+
return self._parent_builder
|
|
483
|
+
|
|
484
|
+
def asc(self) -> DoctorFilterBuilder:
|
|
485
|
+
super().asc()
|
|
486
|
+
return self._parent_builder
|
|
487
|
+
|
|
488
|
+
def desc(self) -> DoctorFilterBuilder:
|
|
489
|
+
super().desc()
|
|
490
|
+
return self._parent_builder
|
|
491
|
+
|
|
492
|
+
def contains(self, value: str) -> DoctorFilterBuilder:
|
|
493
|
+
super().contains(value)
|
|
494
|
+
return self._parent_builder
|
|
495
|
+
|
|
496
|
+
def startswith(self, value: str) -> DoctorFilterBuilder:
|
|
497
|
+
super().startswith(value)
|
|
498
|
+
return self._parent_builder
|
|
499
|
+
|
|
500
|
+
def endswith(self, value: str) -> DoctorFilterBuilder:
|
|
501
|
+
super().endswith(value)
|
|
502
|
+
return self._parent_builder
|
|
503
|
+
|
|
504
|
+
class _TitleField(StringFieldFilter):
|
|
505
|
+
"""Chainable title filter with type-safe operations."""
|
|
506
|
+
|
|
507
|
+
def __init__(self, builder: DoctorFilterBuilder) -> None:
|
|
508
|
+
super().__init__("title", object.__getattribute__(builder, "_filter"))
|
|
509
|
+
self._parent_builder = builder
|
|
510
|
+
|
|
511
|
+
def eq(self, value: str | None) -> DoctorFilterBuilder:
|
|
512
|
+
super().eq(value)
|
|
513
|
+
return self._parent_builder
|
|
514
|
+
|
|
515
|
+
def ne(self, value: str | None) -> DoctorFilterBuilder:
|
|
516
|
+
super().ne(value)
|
|
517
|
+
return self._parent_builder
|
|
518
|
+
|
|
519
|
+
def gt(self, value: str | None) -> DoctorFilterBuilder:
|
|
520
|
+
super().gt(value)
|
|
521
|
+
return self._parent_builder
|
|
522
|
+
|
|
523
|
+
def lt(self, value: str | None) -> DoctorFilterBuilder:
|
|
524
|
+
super().lt(value)
|
|
525
|
+
return self._parent_builder
|
|
526
|
+
|
|
527
|
+
def gte(self, value: str | None) -> DoctorFilterBuilder:
|
|
528
|
+
super().gte(value)
|
|
529
|
+
return self._parent_builder
|
|
530
|
+
|
|
531
|
+
def lte(self, value: str | None) -> DoctorFilterBuilder:
|
|
532
|
+
super().lte(value)
|
|
533
|
+
return self._parent_builder
|
|
534
|
+
|
|
535
|
+
def in_(self, values: t.Sequence[str | None]) -> DoctorFilterBuilder:
|
|
536
|
+
super().in_(values)
|
|
537
|
+
return self._parent_builder
|
|
538
|
+
|
|
539
|
+
def nin(self, values: t.Sequence[str | None]) -> DoctorFilterBuilder:
|
|
540
|
+
super().nin(values)
|
|
541
|
+
return self._parent_builder
|
|
542
|
+
|
|
543
|
+
def between(self, value1: str | None, value2: str | None) -> DoctorFilterBuilder:
|
|
544
|
+
super().between(value1, value2)
|
|
545
|
+
return self._parent_builder
|
|
546
|
+
|
|
547
|
+
def is_null(self) -> DoctorFilterBuilder:
|
|
548
|
+
super().is_null()
|
|
549
|
+
return self._parent_builder
|
|
550
|
+
|
|
551
|
+
def is_not_null(self) -> DoctorFilterBuilder:
|
|
552
|
+
super().is_not_null()
|
|
553
|
+
return self._parent_builder
|
|
554
|
+
|
|
555
|
+
def asc(self) -> DoctorFilterBuilder:
|
|
556
|
+
super().asc()
|
|
557
|
+
return self._parent_builder
|
|
558
|
+
|
|
559
|
+
def desc(self) -> DoctorFilterBuilder:
|
|
560
|
+
super().desc()
|
|
561
|
+
return self._parent_builder
|
|
562
|
+
|
|
563
|
+
def contains(self, value: str) -> DoctorFilterBuilder:
|
|
564
|
+
super().contains(value)
|
|
565
|
+
return self._parent_builder
|
|
566
|
+
|
|
567
|
+
def startswith(self, value: str) -> DoctorFilterBuilder:
|
|
568
|
+
super().startswith(value)
|
|
569
|
+
return self._parent_builder
|
|
570
|
+
|
|
571
|
+
def endswith(self, value: str) -> DoctorFilterBuilder:
|
|
572
|
+
super().endswith(value)
|
|
573
|
+
return self._parent_builder
|
|
574
|
+
|
|
575
|
+
class _HospitalField(StringFieldFilter):
|
|
576
|
+
"""Chainable hospital filter with type-safe operations."""
|
|
577
|
+
|
|
578
|
+
def __init__(self, builder: DoctorFilterBuilder) -> None:
|
|
579
|
+
super().__init__("hospital", object.__getattribute__(builder, "_filter"))
|
|
580
|
+
self._parent_builder = builder
|
|
581
|
+
|
|
582
|
+
def eq(self, value: str | None) -> DoctorFilterBuilder:
|
|
583
|
+
super().eq(value)
|
|
584
|
+
return self._parent_builder
|
|
585
|
+
|
|
586
|
+
def ne(self, value: str | None) -> DoctorFilterBuilder:
|
|
587
|
+
super().ne(value)
|
|
588
|
+
return self._parent_builder
|
|
589
|
+
|
|
590
|
+
def gt(self, value: str | None) -> DoctorFilterBuilder:
|
|
591
|
+
super().gt(value)
|
|
592
|
+
return self._parent_builder
|
|
593
|
+
|
|
594
|
+
def lt(self, value: str | None) -> DoctorFilterBuilder:
|
|
595
|
+
super().lt(value)
|
|
596
|
+
return self._parent_builder
|
|
597
|
+
|
|
598
|
+
def gte(self, value: str | None) -> DoctorFilterBuilder:
|
|
599
|
+
super().gte(value)
|
|
600
|
+
return self._parent_builder
|
|
601
|
+
|
|
602
|
+
def lte(self, value: str | None) -> DoctorFilterBuilder:
|
|
603
|
+
super().lte(value)
|
|
604
|
+
return self._parent_builder
|
|
605
|
+
|
|
606
|
+
def in_(self, values: t.Sequence[str | None]) -> DoctorFilterBuilder:
|
|
607
|
+
super().in_(values)
|
|
608
|
+
return self._parent_builder
|
|
609
|
+
|
|
610
|
+
def nin(self, values: t.Sequence[str | None]) -> DoctorFilterBuilder:
|
|
611
|
+
super().nin(values)
|
|
612
|
+
return self._parent_builder
|
|
613
|
+
|
|
614
|
+
def between(self, value1: str | None, value2: str | None) -> DoctorFilterBuilder:
|
|
615
|
+
super().between(value1, value2)
|
|
616
|
+
return self._parent_builder
|
|
617
|
+
|
|
618
|
+
def is_null(self) -> DoctorFilterBuilder:
|
|
619
|
+
super().is_null()
|
|
620
|
+
return self._parent_builder
|
|
621
|
+
|
|
622
|
+
def is_not_null(self) -> DoctorFilterBuilder:
|
|
623
|
+
super().is_not_null()
|
|
624
|
+
return self._parent_builder
|
|
625
|
+
|
|
626
|
+
def asc(self) -> DoctorFilterBuilder:
|
|
627
|
+
super().asc()
|
|
628
|
+
return self._parent_builder
|
|
629
|
+
|
|
630
|
+
def desc(self) -> DoctorFilterBuilder:
|
|
631
|
+
super().desc()
|
|
632
|
+
return self._parent_builder
|
|
633
|
+
|
|
634
|
+
def contains(self, value: str) -> DoctorFilterBuilder:
|
|
635
|
+
super().contains(value)
|
|
636
|
+
return self._parent_builder
|
|
637
|
+
|
|
638
|
+
def startswith(self, value: str) -> DoctorFilterBuilder:
|
|
639
|
+
super().startswith(value)
|
|
640
|
+
return self._parent_builder
|
|
641
|
+
|
|
642
|
+
def endswith(self, value: str) -> DoctorFilterBuilder:
|
|
643
|
+
super().endswith(value)
|
|
644
|
+
return self._parent_builder
|
|
645
|
+
|
|
646
|
+
class _PhoneField(StringFieldFilter):
|
|
647
|
+
"""Chainable phone filter with type-safe operations."""
|
|
648
|
+
|
|
649
|
+
def __init__(self, builder: DoctorFilterBuilder) -> None:
|
|
650
|
+
super().__init__("phone", object.__getattribute__(builder, "_filter"))
|
|
651
|
+
self._parent_builder = builder
|
|
652
|
+
|
|
653
|
+
def eq(self, value: CNPhone | None) -> DoctorFilterBuilder:
|
|
654
|
+
super().eq(value)
|
|
655
|
+
return self._parent_builder
|
|
656
|
+
|
|
657
|
+
def ne(self, value: CNPhone | None) -> DoctorFilterBuilder:
|
|
658
|
+
super().ne(value)
|
|
659
|
+
return self._parent_builder
|
|
660
|
+
|
|
661
|
+
def gt(self, value: CNPhone | None) -> DoctorFilterBuilder:
|
|
662
|
+
super().gt(value)
|
|
663
|
+
return self._parent_builder
|
|
664
|
+
|
|
665
|
+
def lt(self, value: CNPhone | None) -> DoctorFilterBuilder:
|
|
666
|
+
super().lt(value)
|
|
667
|
+
return self._parent_builder
|
|
668
|
+
|
|
669
|
+
def gte(self, value: CNPhone | None) -> DoctorFilterBuilder:
|
|
670
|
+
super().gte(value)
|
|
671
|
+
return self._parent_builder
|
|
672
|
+
|
|
673
|
+
def lte(self, value: CNPhone | None) -> DoctorFilterBuilder:
|
|
674
|
+
super().lte(value)
|
|
675
|
+
return self._parent_builder
|
|
676
|
+
|
|
677
|
+
def in_(self, values: t.Sequence[CNPhone | None]) -> DoctorFilterBuilder:
|
|
678
|
+
super().in_(values)
|
|
679
|
+
return self._parent_builder
|
|
680
|
+
|
|
681
|
+
def nin(self, values: t.Sequence[CNPhone | None]) -> DoctorFilterBuilder:
|
|
682
|
+
super().nin(values)
|
|
683
|
+
return self._parent_builder
|
|
684
|
+
|
|
685
|
+
def between(self, value1: CNPhone | None, value2: CNPhone | None) -> DoctorFilterBuilder:
|
|
686
|
+
super().between(value1, value2)
|
|
687
|
+
return self._parent_builder
|
|
688
|
+
|
|
689
|
+
def is_null(self) -> DoctorFilterBuilder:
|
|
690
|
+
super().is_null()
|
|
691
|
+
return self._parent_builder
|
|
692
|
+
|
|
693
|
+
def is_not_null(self) -> DoctorFilterBuilder:
|
|
694
|
+
super().is_not_null()
|
|
695
|
+
return self._parent_builder
|
|
696
|
+
|
|
697
|
+
def asc(self) -> DoctorFilterBuilder:
|
|
698
|
+
super().asc()
|
|
699
|
+
return self._parent_builder
|
|
700
|
+
|
|
701
|
+
def desc(self) -> DoctorFilterBuilder:
|
|
702
|
+
super().desc()
|
|
703
|
+
return self._parent_builder
|
|
704
|
+
|
|
705
|
+
def contains(self, value: str) -> DoctorFilterBuilder:
|
|
706
|
+
super().contains(value)
|
|
707
|
+
return self._parent_builder
|
|
708
|
+
|
|
709
|
+
def startswith(self, value: str) -> DoctorFilterBuilder:
|
|
710
|
+
super().startswith(value)
|
|
711
|
+
return self._parent_builder
|
|
712
|
+
|
|
713
|
+
def endswith(self, value: str) -> DoctorFilterBuilder:
|
|
714
|
+
super().endswith(value)
|
|
715
|
+
return self._parent_builder
|
|
716
|
+
|
|
717
|
+
class _EmailField(StringBackedFieldFilter[Email | None]):
|
|
718
|
+
"""Chainable email filter with type-safe operations."""
|
|
719
|
+
|
|
720
|
+
def __init__(self, builder: DoctorFilterBuilder) -> None:
|
|
721
|
+
super().__init__("email", object.__getattribute__(builder, "_filter"))
|
|
722
|
+
self._parent_builder = builder
|
|
723
|
+
|
|
724
|
+
def eq(self, value: Email | None) -> DoctorFilterBuilder:
|
|
725
|
+
super().eq(value)
|
|
726
|
+
return self._parent_builder
|
|
727
|
+
|
|
728
|
+
def ne(self, value: Email | None) -> DoctorFilterBuilder:
|
|
729
|
+
super().ne(value)
|
|
730
|
+
return self._parent_builder
|
|
731
|
+
|
|
732
|
+
def gt(self, value: Email | None) -> DoctorFilterBuilder:
|
|
733
|
+
super().gt(value)
|
|
734
|
+
return self._parent_builder
|
|
735
|
+
|
|
736
|
+
def lt(self, value: Email | None) -> DoctorFilterBuilder:
|
|
737
|
+
super().lt(value)
|
|
738
|
+
return self._parent_builder
|
|
739
|
+
|
|
740
|
+
def gte(self, value: Email | None) -> DoctorFilterBuilder:
|
|
741
|
+
super().gte(value)
|
|
742
|
+
return self._parent_builder
|
|
743
|
+
|
|
744
|
+
def lte(self, value: Email | None) -> DoctorFilterBuilder:
|
|
745
|
+
super().lte(value)
|
|
746
|
+
return self._parent_builder
|
|
747
|
+
|
|
748
|
+
def in_(self, values: t.Sequence[Email | None]) -> DoctorFilterBuilder:
|
|
749
|
+
super().in_(values)
|
|
750
|
+
return self._parent_builder
|
|
751
|
+
|
|
752
|
+
def nin(self, values: t.Sequence[Email | None]) -> DoctorFilterBuilder:
|
|
753
|
+
super().nin(values)
|
|
754
|
+
return self._parent_builder
|
|
755
|
+
|
|
756
|
+
def between(self, value1: Email | None, value2: Email | None) -> DoctorFilterBuilder:
|
|
757
|
+
super().between(value1, value2)
|
|
758
|
+
return self._parent_builder
|
|
759
|
+
|
|
760
|
+
def is_null(self) -> DoctorFilterBuilder:
|
|
761
|
+
super().is_null()
|
|
762
|
+
return self._parent_builder
|
|
763
|
+
|
|
764
|
+
def is_not_null(self) -> DoctorFilterBuilder:
|
|
765
|
+
super().is_not_null()
|
|
766
|
+
return self._parent_builder
|
|
767
|
+
|
|
768
|
+
def asc(self) -> DoctorFilterBuilder:
|
|
769
|
+
super().asc()
|
|
770
|
+
return self._parent_builder
|
|
771
|
+
|
|
772
|
+
def desc(self) -> DoctorFilterBuilder:
|
|
773
|
+
super().desc()
|
|
774
|
+
return self._parent_builder
|
|
775
|
+
|
|
776
|
+
def contains(self, value: str) -> DoctorFilterBuilder:
|
|
777
|
+
super().contains(value)
|
|
778
|
+
return self._parent_builder
|
|
779
|
+
|
|
780
|
+
def startswith(self, value: str) -> DoctorFilterBuilder:
|
|
781
|
+
super().startswith(value)
|
|
782
|
+
return self._parent_builder
|
|
783
|
+
|
|
784
|
+
def endswith(self, value: str) -> DoctorFilterBuilder:
|
|
785
|
+
super().endswith(value)
|
|
786
|
+
return self._parent_builder
|
|
787
|
+
|
|
788
|
+
class _IsActiveField(FieldFilter[bool]):
|
|
789
|
+
"""Chainable is_active filter with type-safe operations."""
|
|
790
|
+
|
|
791
|
+
def __init__(self, builder: DoctorFilterBuilder) -> None:
|
|
792
|
+
super().__init__("is_active", object.__getattribute__(builder, "_filter"))
|
|
793
|
+
self._parent_builder = builder
|
|
794
|
+
|
|
795
|
+
def eq(self, value: bool) -> DoctorFilterBuilder:
|
|
796
|
+
super().eq(value)
|
|
797
|
+
return self._parent_builder
|
|
798
|
+
|
|
799
|
+
def ne(self, value: bool) -> DoctorFilterBuilder:
|
|
800
|
+
super().ne(value)
|
|
801
|
+
return self._parent_builder
|
|
802
|
+
|
|
803
|
+
def gt(self, value: bool) -> DoctorFilterBuilder:
|
|
804
|
+
super().gt(value)
|
|
805
|
+
return self._parent_builder
|
|
806
|
+
|
|
807
|
+
def lt(self, value: bool) -> DoctorFilterBuilder:
|
|
808
|
+
super().lt(value)
|
|
809
|
+
return self._parent_builder
|
|
810
|
+
|
|
811
|
+
def gte(self, value: bool) -> DoctorFilterBuilder:
|
|
812
|
+
super().gte(value)
|
|
813
|
+
return self._parent_builder
|
|
814
|
+
|
|
815
|
+
def lte(self, value: bool) -> DoctorFilterBuilder:
|
|
816
|
+
super().lte(value)
|
|
817
|
+
return self._parent_builder
|
|
818
|
+
|
|
819
|
+
def in_(self, values: t.Sequence[bool]) -> DoctorFilterBuilder:
|
|
820
|
+
super().in_(values)
|
|
821
|
+
return self._parent_builder
|
|
822
|
+
|
|
823
|
+
def nin(self, values: t.Sequence[bool]) -> DoctorFilterBuilder:
|
|
824
|
+
super().nin(values)
|
|
825
|
+
return self._parent_builder
|
|
826
|
+
|
|
827
|
+
def between(self, value1: bool, value2: bool) -> DoctorFilterBuilder:
|
|
828
|
+
super().between(value1, value2)
|
|
829
|
+
return self._parent_builder
|
|
830
|
+
|
|
831
|
+
def is_null(self) -> DoctorFilterBuilder:
|
|
832
|
+
super().is_null()
|
|
833
|
+
return self._parent_builder
|
|
834
|
+
|
|
835
|
+
def is_not_null(self) -> DoctorFilterBuilder:
|
|
836
|
+
super().is_not_null()
|
|
837
|
+
return self._parent_builder
|
|
838
|
+
|
|
839
|
+
def asc(self) -> DoctorFilterBuilder:
|
|
840
|
+
super().asc()
|
|
841
|
+
return self._parent_builder
|
|
842
|
+
|
|
843
|
+
def desc(self) -> DoctorFilterBuilder:
|
|
844
|
+
super().desc()
|
|
845
|
+
return self._parent_builder
|
|
846
|
+
|
|
847
|
+
def and_(self, *filters: Filter) -> Filter:
|
|
848
|
+
"""Combine with other filters using AND logic.
|
|
849
|
+
|
|
850
|
+
Args:
|
|
851
|
+
*filters: Other filters to combine with AND.
|
|
852
|
+
|
|
853
|
+
Returns:
|
|
854
|
+
Combined filter with AND logic.
|
|
855
|
+
|
|
856
|
+
Example:
|
|
857
|
+
```python
|
|
858
|
+
# username = 'john' AND email = 'john@ex.com'
|
|
859
|
+
filter = (
|
|
860
|
+
doctor_filter()
|
|
861
|
+
.username.eq("john")
|
|
862
|
+
.and_(doctor_filter().email.eq("john@ex.com"))
|
|
863
|
+
)
|
|
864
|
+
```
|
|
865
|
+
"""
|
|
866
|
+
return object.__getattribute__(self, "_filter").and_(*filters)
|
|
867
|
+
|
|
868
|
+
def or_(self, *filters: Filter) -> Filter:
|
|
869
|
+
"""Combine with other filters using OR logic.
|
|
870
|
+
|
|
871
|
+
Args:
|
|
872
|
+
*filters: Other filters to combine with OR.
|
|
873
|
+
|
|
874
|
+
Returns:
|
|
875
|
+
Combined filter with OR logic.
|
|
876
|
+
|
|
877
|
+
Example:
|
|
878
|
+
```python
|
|
879
|
+
# username = 'john' OR email = 'john@ex.com'
|
|
880
|
+
filter = (
|
|
881
|
+
doctor_filter()
|
|
882
|
+
.username.eq("john")
|
|
883
|
+
.or_(doctor_filter().email.eq("john@ex.com"))
|
|
884
|
+
)
|
|
885
|
+
```
|
|
886
|
+
"""
|
|
887
|
+
return object.__getattribute__(self, "_filter").or_(*filters)
|
|
888
|
+
|
|
889
|
+
def not_(self) -> Filter:
|
|
890
|
+
"""Negate the current filter.
|
|
891
|
+
|
|
892
|
+
Returns:
|
|
893
|
+
Negated filter.
|
|
894
|
+
|
|
895
|
+
Example:
|
|
896
|
+
```python
|
|
897
|
+
# NOT (username = 'john')
|
|
898
|
+
filter = doctor_filter().username.eq("john").not_()
|
|
899
|
+
```
|
|
900
|
+
"""
|
|
901
|
+
return object.__getattribute__(self, "_filter").not_()
|
|
902
|
+
|
|
903
|
+
# Field properties
|
|
904
|
+
|
|
905
|
+
@property
|
|
906
|
+
def id(self) -> _IdField:
|
|
907
|
+
"""Filter by id field."""
|
|
908
|
+
return self._IdField(self)
|
|
909
|
+
|
|
910
|
+
@property
|
|
911
|
+
def created_at(self) -> _CreatedAtField:
|
|
912
|
+
"""Filter by created_at field."""
|
|
913
|
+
return self._CreatedAtField(self)
|
|
914
|
+
|
|
915
|
+
@property
|
|
916
|
+
def updated_at(self) -> _UpdatedAtField:
|
|
917
|
+
"""Filter by updated_at field."""
|
|
918
|
+
return self._UpdatedAtField(self)
|
|
919
|
+
|
|
920
|
+
@property
|
|
921
|
+
def eid(self) -> _EidField:
|
|
922
|
+
"""Filter by eid field."""
|
|
923
|
+
return self._EidField(self)
|
|
924
|
+
|
|
925
|
+
@property
|
|
926
|
+
def password_hash(self) -> _PasswordHashField:
|
|
927
|
+
"""Filter by password_hash field."""
|
|
928
|
+
return self._PasswordHashField(self)
|
|
929
|
+
|
|
930
|
+
@property
|
|
931
|
+
def name(self) -> _NameField:
|
|
932
|
+
"""Filter by name field."""
|
|
933
|
+
return self._NameField(self)
|
|
934
|
+
|
|
935
|
+
@property
|
|
936
|
+
def department(self) -> _DepartmentField:
|
|
937
|
+
"""Filter by department field."""
|
|
938
|
+
return self._DepartmentField(self)
|
|
939
|
+
|
|
940
|
+
@property
|
|
941
|
+
def title(self) -> _TitleField:
|
|
942
|
+
"""Filter by title field."""
|
|
943
|
+
return self._TitleField(self)
|
|
944
|
+
|
|
945
|
+
@property
|
|
946
|
+
def hospital(self) -> _HospitalField:
|
|
947
|
+
"""Filter by hospital field."""
|
|
948
|
+
return self._HospitalField(self)
|
|
949
|
+
|
|
950
|
+
@property
|
|
951
|
+
def phone(self) -> _PhoneField:
|
|
952
|
+
"""Filter by phone field."""
|
|
953
|
+
return self._PhoneField(self)
|
|
954
|
+
|
|
955
|
+
@property
|
|
956
|
+
def email(self) -> _EmailField:
|
|
957
|
+
"""Filter by email field."""
|
|
958
|
+
return self._EmailField(self)
|
|
959
|
+
|
|
960
|
+
@property
|
|
961
|
+
def is_active(self) -> _IsActiveField:
|
|
962
|
+
"""Filter by is_active field."""
|
|
963
|
+
return self._IsActiveField(self)
|
|
964
|
+
|
|
965
|
+
|
|
966
|
+
def doctor_filter() -> DoctorFilterBuilder:
|
|
967
|
+
"""Create a Doctor filter builder with full type safety.
|
|
968
|
+
|
|
969
|
+
Returns:
|
|
970
|
+
A DoctorFilterBuilder instance with full IDE support and chainable fields.
|
|
971
|
+
|
|
972
|
+
Example:
|
|
973
|
+
```python
|
|
974
|
+
# AND conditions (chained)
|
|
975
|
+
filter = (
|
|
976
|
+
doctor_filter()
|
|
977
|
+
.field1.eq(value1)
|
|
978
|
+
.field2.contains(value2)
|
|
979
|
+
)
|
|
980
|
+
|
|
981
|
+
# OR conditions
|
|
982
|
+
filter = doctor_filter().field1.eq(
|
|
983
|
+
value1
|
|
984
|
+
) | doctor_filter().field2.eq(value2)
|
|
985
|
+
```
|
|
986
|
+
"""
|
|
987
|
+
return DoctorFilterBuilder(Doctor)
|