ezKit 1.12.47__tar.gz → 1.12.49__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.47/ezKit.egg-info → ezkit-1.12.49}/PKG-INFO +1 -1
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/database.py +36 -6
- {ezkit-1.12.47 → ezkit-1.12.49/ezKit.egg-info}/PKG-INFO +1 -1
- {ezkit-1.12.47 → ezkit-1.12.49}/setup.py +1 -1
- {ezkit-1.12.47 → ezkit-1.12.49}/LICENSE +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/MANIFEST.in +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/README.md +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/__init__.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/_file.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/auth.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/bottle.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/bottle_extensions.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/cipher.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/dockerhub.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/errors.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/fastapix.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/http.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/markdown_to_html.template +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/mongo.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/qywx.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/redis.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/sendemail.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/token.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/utils.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/xftp.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit/zabbix.py +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit.egg-info/SOURCES.txt +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit.egg-info/dependency_links.txt +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit.egg-info/requires.txt +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/ezKit.egg-info/top_level.txt +0 -0
- {ezkit-1.12.47 → ezkit-1.12.49}/setup.cfg +0 -0
@@ -9,6 +9,7 @@
|
|
9
9
|
|
10
10
|
import csv
|
11
11
|
import json
|
12
|
+
import re
|
12
13
|
from copy import deepcopy
|
13
14
|
from datetime import date, datetime
|
14
15
|
from typing import Any, Dict, List, Optional, Tuple, Type
|
@@ -128,6 +129,21 @@ def orm_to_dict(obj, include: list | None = None) -> dict | list | None:
|
|
128
129
|
# --------------------------------------------------------------------------------------------------
|
129
130
|
|
130
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\3", source, count=1)
|
142
|
+
|
143
|
+
pattern = re.compile(r"(^|\.)(datetime::date)$")
|
144
|
+
return pattern.sub(r"\1datetime_date\3", source, count=1)
|
145
|
+
|
146
|
+
|
131
147
|
def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, Any], list]]:
|
132
148
|
"""
|
133
149
|
构建 SQLAlchemy 原生 SQL 查询的 WHERE 子句与绑定参数 (text + :param_name)
|
@@ -219,8 +235,15 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
|
|
219
235
|
for field, value in _data.items():
|
220
236
|
|
221
237
|
# 特殊处理日期字段
|
222
|
-
|
223
|
-
|
238
|
+
# 如果匹配到 datetime_date 或者 .datetime_date 或者 datetime_date__ 或者 .datetime_date__ 就替换
|
239
|
+
# is_date_field = field == "datetime_date" or field.startswith("datetime_date__")
|
240
|
+
# base_field = field.replace("datetime_date", "datetime::date", 1) if is_date_field else field
|
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)
|
245
|
+
else:
|
246
|
+
base_field = field
|
224
247
|
|
225
248
|
if "__" in base_field:
|
226
249
|
|
@@ -230,8 +253,11 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
|
|
230
253
|
param_key = f"{base.replace('.', '_')}_{op}"
|
231
254
|
|
232
255
|
# 特殊处理日期字段
|
233
|
-
if param_key.startswith("datetime::date"):
|
234
|
-
|
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)
|
235
261
|
|
236
262
|
if op == "like":
|
237
263
|
sql_parts.append(f"{base} LIKE :{param_key}")
|
@@ -253,8 +279,12 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
|
|
253
279
|
|
254
280
|
param_key = base_field.replace(".", "_")
|
255
281
|
# 特殊处理日期字段
|
256
|
-
|
257
|
-
|
282
|
+
# 如果匹配到 datetime_date 或者 .datetime_date 或者 datetime_date__ 或者 .datetime_date__ 就替换
|
283
|
+
# if param_key.startswith("datetime::date"):
|
284
|
+
# param_key = param_key.replace("datetime::date", "datetime_date", 1)
|
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)
|
258
288
|
sql_parts.append(f"{base_field} = :{param_key}")
|
259
289
|
param_dict[param_key] = value
|
260
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
|