ezKit 1.12.49__tar.gz → 1.12.51__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.49/ezKit.egg-info → ezkit-1.12.51}/PKG-INFO +1 -1
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/database.py +59 -41
- {ezkit-1.12.49 → ezkit-1.12.51/ezKit.egg-info}/PKG-INFO +1 -1
- {ezkit-1.12.49 → ezkit-1.12.51}/setup.py +1 -1
- {ezkit-1.12.49 → ezkit-1.12.51}/LICENSE +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/MANIFEST.in +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/README.md +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/__init__.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/_file.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/auth.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/bottle.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/bottle_extensions.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/cipher.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/dockerhub.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/errors.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/fastapix.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/http.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/markdown_to_html.template +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/mongo.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/qywx.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/redis.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/sendemail.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/token.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/utils.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/xftp.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit/zabbix.py +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit.egg-info/SOURCES.txt +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit.egg-info/dependency_links.txt +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit.egg-info/requires.txt +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/ezKit.egg-info/top_level.txt +0 -0
- {ezkit-1.12.49 → ezkit-1.12.51}/setup.cfg +0 -0
@@ -137,11 +137,11 @@ def replace_datetime(source: str, to_pgsql: bool = True) -> str:
|
|
137
137
|
"""
|
138
138
|
|
139
139
|
if to_pgsql:
|
140
|
-
pattern = re.compile(r"(^|\.)
|
141
|
-
return pattern.sub(r"\1datetime::date\
|
140
|
+
pattern = re.compile(r"(^|\.)datetime_date(__|$)")
|
141
|
+
return pattern.sub(r"\1datetime::date\2", source, count=1)
|
142
142
|
|
143
|
-
pattern = re.compile(r"(
|
144
|
-
return pattern.sub(r"\1datetime_date
|
143
|
+
pattern = re.compile(r"(^|_)datetime::date$")
|
144
|
+
return pattern.sub(r"\1datetime_date", source, count=1)
|
145
145
|
|
146
146
|
|
147
147
|
def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, Any], list]]:
|
@@ -238,7 +238,7 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
|
|
238
238
|
# 如果匹配到 datetime_date 或者 .datetime_date 或者 datetime_date__ 或者 .datetime_date__ 就替换
|
239
239
|
# is_date_field = field == "datetime_date" or field.startswith("datetime_date__")
|
240
240
|
# base_field = field.replace("datetime_date", "datetime::date", 1) if is_date_field else field
|
241
|
-
pattern_date_field = re.compile(r"(^|\.)
|
241
|
+
pattern_date_field = re.compile(r"(^|\.)datetime_date(__|$)")
|
242
242
|
if pattern_date_field.search(field):
|
243
243
|
# base_field = pattern_date.sub(r"\1datetime::date\3", field, count=1)
|
244
244
|
base_field = replace_datetime(field, to_pgsql=True)
|
@@ -255,7 +255,7 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
|
|
255
255
|
# 特殊处理日期字段
|
256
256
|
# if param_key.startswith("datetime::date"):
|
257
257
|
# param_key = param_key.replace("datetime::date", "datetime_date", 1)
|
258
|
-
pattern_param_key = re.compile(r"(
|
258
|
+
pattern_param_key = re.compile(r"(^|_)datetime::date$")
|
259
259
|
if pattern_param_key.search(param_key):
|
260
260
|
param_key = replace_datetime(param_key, to_pgsql=False)
|
261
261
|
|
@@ -282,7 +282,7 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
|
|
282
282
|
# 如果匹配到 datetime_date 或者 .datetime_date 或者 datetime_date__ 或者 .datetime_date__ 就替换
|
283
283
|
# if param_key.startswith("datetime::date"):
|
284
284
|
# param_key = param_key.replace("datetime::date", "datetime_date", 1)
|
285
|
-
pattern_param_key = re.compile(r"(
|
285
|
+
pattern_param_key = re.compile(r"(^|_)datetime::date$")
|
286
286
|
if pattern_param_key.search(param_key):
|
287
287
|
param_key = replace_datetime(param_key, to_pgsql=False)
|
288
288
|
sql_parts.append(f"{base_field} = :{param_key}")
|
@@ -599,18 +599,14 @@ class Database:
|
|
599
599
|
try:
|
600
600
|
# SQL文件优先
|
601
601
|
if isinstance(read_sql_file, dict) and utils.isTrue(read_sql_file, dict):
|
602
|
-
read_sql_file.pop("encoding")
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
}
|
608
|
-
with open(encoding="utf-8", **read_sql_file_kwargs) as _file:
|
609
|
-
sql_statement = _file.read()
|
610
|
-
else:
|
611
|
-
if not isinstance(sql, str):
|
612
|
-
return None
|
602
|
+
encoding = read_sql_file.pop("encoding", "utf-8")
|
603
|
+
file_kwargs = {"mode": "r", **read_sql_file}
|
604
|
+
with open(encoding=encoding, **file_kwargs) as f:
|
605
|
+
sql_statement = f.read()
|
606
|
+
elif isinstance(sql, str):
|
613
607
|
sql_statement = sql
|
608
|
+
else:
|
609
|
+
return None
|
614
610
|
except Exception as e:
|
615
611
|
logger.exception(e)
|
616
612
|
return None
|
@@ -618,36 +614,58 @@ class Database:
|
|
618
614
|
# ------------------------------------------------------------------------------------------
|
619
615
|
|
620
616
|
# 创建一个连接
|
621
|
-
with self.engine.connect() as connection:
|
617
|
+
# with self.engine.connect() as connection:
|
622
618
|
|
623
|
-
|
624
|
-
|
619
|
+
# # 开始一个事务
|
620
|
+
# with connection.begin(): # 事务会自动提交或回滚
|
625
621
|
|
626
|
-
|
622
|
+
# try:
|
627
623
|
|
628
|
-
|
629
|
-
|
624
|
+
# # 执行 SQL 查询
|
625
|
+
# result = connection.execute(text(sql_statement))
|
630
626
|
|
631
|
-
|
632
|
-
|
627
|
+
# # 执行成功
|
628
|
+
# logger.success(f"{info} [success]")
|
633
629
|
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
630
|
+
# # 返回查询结果
|
631
|
+
# if isinstance(save_to_csv, dict) and utils.isTrue(save_to_csv, dict):
|
632
|
+
# save_to_csv_kwargs: dict = {
|
633
|
+
# "mode": "w",
|
634
|
+
# "encoding": "utf-8",
|
635
|
+
# **save_to_csv,
|
636
|
+
# }
|
637
|
+
# with open(encoding="utf-8", **save_to_csv_kwargs) as _file:
|
638
|
+
# return self._result_save(_file, result)
|
643
639
|
|
644
|
-
|
640
|
+
# return result
|
645
641
|
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
642
|
+
# except Exception as e:
|
643
|
+
# # 发生异常时回滚事务
|
644
|
+
# logger.info(f"{info} [failed]")
|
645
|
+
# logger.exception(e)
|
646
|
+
# return None
|
647
|
+
|
648
|
+
try:
|
649
|
+
|
650
|
+
# 连接 + 事务
|
651
|
+
with self.engine.connect() as conn, conn.begin():
|
652
|
+
|
653
|
+
result = conn.execute(text(sql_statement))
|
654
|
+
|
655
|
+
logger.success(f"{info} [success]")
|
656
|
+
|
657
|
+
if isinstance(save_to_csv, dict) and utils.isTrue(save_to_csv, dict):
|
658
|
+
encoding = save_to_csv.pop("encoding", "utf-8")
|
659
|
+
csv_kwargs = {"mode": "w", **save_to_csv}
|
660
|
+
with open(encoding=encoding, **csv_kwargs) as f:
|
661
|
+
return self._result_save(f, result)
|
662
|
+
|
663
|
+
return result
|
664
|
+
|
665
|
+
except Exception as e:
|
666
|
+
logger.error(f"{info} [failed]")
|
667
|
+
logger.exception(e)
|
668
|
+
return None
|
651
669
|
|
652
670
|
# ----------------------------------------------------------------------------------------------
|
653
671
|
|
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
|