ezKit 1.12.48__tar.gz → 1.12.50__tar.gz
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.
- {ezkit-1.12.48/ezKit.egg-info → ezkit-1.12.50}/PKG-INFO +1 -1
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/database.py +27 -8
- {ezkit-1.12.48 → ezkit-1.12.50/ezKit.egg-info}/PKG-INFO +1 -1
- {ezkit-1.12.48 → ezkit-1.12.50}/setup.py +1 -1
- {ezkit-1.12.48 → ezkit-1.12.50}/LICENSE +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/MANIFEST.in +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/README.md +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/__init__.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/_file.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/auth.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/bottle.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/bottle_extensions.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/cipher.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/dockerhub.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/errors.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/fastapix.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/http.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/markdown_to_html.template +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/mongo.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/qywx.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/redis.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/sendemail.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/token.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/utils.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/xftp.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit/zabbix.py +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit.egg-info/SOURCES.txt +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit.egg-info/dependency_links.txt +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit.egg-info/requires.txt +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/ezKit.egg-info/top_level.txt +0 -0
- {ezkit-1.12.48 → ezkit-1.12.50}/setup.cfg +0 -0
@@ -129,6 +129,21 @@ def orm_to_dict(obj, include: list | None = None) -> dict | list | None:
|
|
129
129
|
# --------------------------------------------------------------------------------------------------
|
130
130
|
|
131
131
|
|
132
|
+
def replace_datetime(source: str, to_pgsql: bool = True) -> str:
|
133
|
+
"""
|
134
|
+
替换 datetime_date <-> datetime::date
|
135
|
+
to_pgsql=True : datetime_date -> datetime::date
|
136
|
+
to_pgsql=False : datetime::date -> datetime_date
|
137
|
+
"""
|
138
|
+
|
139
|
+
if to_pgsql:
|
140
|
+
pattern = re.compile(r"(^|\.)datetime_date(__|$)")
|
141
|
+
return pattern.sub(r"\1datetime::date\2", source, count=1)
|
142
|
+
|
143
|
+
pattern = re.compile(r"(^|_)datetime::date$")
|
144
|
+
return pattern.sub(r"\1datetime_date", source, count=1)
|
145
|
+
|
146
|
+
|
132
147
|
def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, Any], list]]:
|
133
148
|
"""
|
134
149
|
构建 SQLAlchemy 原生 SQL 查询的 WHERE 子句与绑定参数 (text + :param_name)
|
@@ -217,16 +232,16 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
|
|
217
232
|
param_dict = {}
|
218
233
|
bind_params = []
|
219
234
|
|
220
|
-
pattern_date = re.compile(r"(^|\.)(datetime_date)(__|$)")
|
221
|
-
|
222
235
|
for field, value in _data.items():
|
223
236
|
|
224
237
|
# 特殊处理日期字段
|
225
238
|
# 如果匹配到 datetime_date 或者 .datetime_date 或者 datetime_date__ 或者 .datetime_date__ 就替换
|
226
239
|
# is_date_field = field == "datetime_date" or field.startswith("datetime_date__")
|
227
240
|
# base_field = field.replace("datetime_date", "datetime::date", 1) if is_date_field else field
|
228
|
-
|
229
|
-
|
241
|
+
pattern_date_field = re.compile(r"(^|\.)datetime_date(__|$)")
|
242
|
+
if pattern_date_field.search(field):
|
243
|
+
# base_field = pattern_date.sub(r"\1datetime::date\3", field, count=1)
|
244
|
+
base_field = replace_datetime(field, to_pgsql=True)
|
230
245
|
else:
|
231
246
|
base_field = field
|
232
247
|
|
@@ -238,8 +253,11 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
|
|
238
253
|
param_key = f"{base.replace('.', '_')}_{op}"
|
239
254
|
|
240
255
|
# 特殊处理日期字段
|
241
|
-
if param_key.startswith("datetime::date"):
|
242
|
-
|
256
|
+
# if param_key.startswith("datetime::date"):
|
257
|
+
# param_key = param_key.replace("datetime::date", "datetime_date", 1)
|
258
|
+
pattern_param_key = re.compile(r"(^|_)datetime::date$")
|
259
|
+
if pattern_param_key.search(param_key):
|
260
|
+
param_key = replace_datetime(param_key, to_pgsql=False)
|
243
261
|
|
244
262
|
if op == "like":
|
245
263
|
sql_parts.append(f"{base} LIKE :{param_key}")
|
@@ -264,8 +282,9 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
|
|
264
282
|
# 如果匹配到 datetime_date 或者 .datetime_date 或者 datetime_date__ 或者 .datetime_date__ 就替换
|
265
283
|
# if param_key.startswith("datetime::date"):
|
266
284
|
# param_key = param_key.replace("datetime::date", "datetime_date", 1)
|
267
|
-
|
268
|
-
|
285
|
+
pattern_param_key = re.compile(r"(^|_)datetime::date$")
|
286
|
+
if pattern_param_key.search(param_key):
|
287
|
+
param_key = replace_datetime(param_key, to_pgsql=False)
|
269
288
|
sql_parts.append(f"{base_field} = :{param_key}")
|
270
289
|
param_dict[param_key] = value
|
271
290
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|