ezKit 1.12.39__py3-none-any.whl → 1.12.41__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.
- ezKit/auth.py +15 -0
- ezKit/database.py +83 -35
- {ezkit-1.12.39.dist-info → ezkit-1.12.41.dist-info}/METADATA +1 -1
- {ezkit-1.12.39.dist-info → ezkit-1.12.41.dist-info}/RECORD +7 -6
- {ezkit-1.12.39.dist-info → ezkit-1.12.41.dist-info}/WHEEL +0 -0
- {ezkit-1.12.39.dist-info → ezkit-1.12.41.dist-info}/licenses/LICENSE +0 -0
- {ezkit-1.12.39.dist-info → ezkit-1.12.41.dist-info}/top_level.txt +0 -0
ezKit/auth.py
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
import bcrypt
|
2
|
+
|
3
|
+
|
4
|
+
def hash_password(password: str) -> str:
|
5
|
+
try:
|
6
|
+
return bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
|
7
|
+
except Exception as _:
|
8
|
+
return ""
|
9
|
+
|
10
|
+
|
11
|
+
def verify_password(plain_password: str, hashed_password: str) -> bool:
|
12
|
+
try:
|
13
|
+
return bcrypt.checkpw(plain_password.encode(), hashed_password.encode())
|
14
|
+
except Exception as _:
|
15
|
+
return False
|
ezKit/database.py
CHANGED
@@ -25,7 +25,7 @@ from .errors import database_error, sqlalchemy_error
|
|
25
25
|
|
26
26
|
# --------------------------------------------------------------------------------------------------
|
27
27
|
|
28
|
-
Base = declarative_base()
|
28
|
+
Base: DeclarativeBase = declarative_base()
|
29
29
|
|
30
30
|
# --------------------------------------------------------------------------------------------------
|
31
31
|
|
@@ -123,6 +123,78 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
|
|
123
123
|
- 返回: (SQL 子句字符串, 参数 dict, bindparams 列表)
|
124
124
|
"""
|
125
125
|
|
126
|
+
# try:
|
127
|
+
|
128
|
+
# _data = deepcopy(data)
|
129
|
+
|
130
|
+
# sql_parts = []
|
131
|
+
# param_dict = {}
|
132
|
+
# bind_params = []
|
133
|
+
|
134
|
+
# for field, value in _data.items():
|
135
|
+
|
136
|
+
# # 特殊处理日期字段
|
137
|
+
# if field == "date" or field.startswith("date__"):
|
138
|
+
# field = field.replace("date", "datetime::date", 1)
|
139
|
+
|
140
|
+
# if "__" in field:
|
141
|
+
|
142
|
+
# base, op = field.split("__", 1)
|
143
|
+
|
144
|
+
# # 避免字段名冲突
|
145
|
+
# param_key = f"{base}_{op}"
|
146
|
+
|
147
|
+
# # 特殊处理日期字段
|
148
|
+
# if param_key.startswith("datetime::date"):
|
149
|
+
# param_key = param_key.replace("datetime::date", "datetime_date", 1)
|
150
|
+
|
151
|
+
# if op == "like":
|
152
|
+
# sql_parts.append(f"{base} LIKE :{param_key}")
|
153
|
+
# param_dict[param_key] = f"%{value}%"
|
154
|
+
# elif op == "ge":
|
155
|
+
# sql_parts.append(f"{base} >= :{param_key}")
|
156
|
+
# param_dict[param_key] = value
|
157
|
+
# elif op == "gt":
|
158
|
+
# sql_parts.append(f"{base} > :{param_key}")
|
159
|
+
# param_dict[param_key] = value
|
160
|
+
# elif op == "le":
|
161
|
+
# sql_parts.append(f"{base} <= :{param_key}")
|
162
|
+
# param_dict[param_key] = value
|
163
|
+
# elif op == "lt":
|
164
|
+
# sql_parts.append(f"{base} < :{param_key}")
|
165
|
+
# param_dict[param_key] = value
|
166
|
+
# elif op == "ne":
|
167
|
+
# sql_parts.append(f"{base} != :{param_key}")
|
168
|
+
# param_dict[param_key] = value
|
169
|
+
# elif op == "in" and isinstance(value, list):
|
170
|
+
# sql_parts.append(f"{base} IN :{param_key}")
|
171
|
+
# param_dict[param_key] = value
|
172
|
+
# bind_params.append(bindparam(param_key, expanding=True))
|
173
|
+
# elif op == "between" and isinstance(value, list) and len(value) == 2:
|
174
|
+
# sql_parts.append(f"{base} BETWEEN :{param_key}_start AND :{param_key}_end")
|
175
|
+
# param_dict[f"{param_key}_start"] = value[0]
|
176
|
+
# param_dict[f"{param_key}_end"] = value[1]
|
177
|
+
|
178
|
+
# else:
|
179
|
+
|
180
|
+
# param_key = field
|
181
|
+
|
182
|
+
# # 特殊处理日期字段
|
183
|
+
# if param_key.startswith("datetime::date"):
|
184
|
+
# param_key = param_key.replace("datetime::date", "datetime_date", 1)
|
185
|
+
|
186
|
+
# sql_parts.append(f"{field} = :{param_key}")
|
187
|
+
|
188
|
+
# param_dict[param_key] = value
|
189
|
+
|
190
|
+
# where_clause = " AND ".join(sql_parts)
|
191
|
+
|
192
|
+
# return where_clause, param_dict, bind_params
|
193
|
+
|
194
|
+
# except Exception as e:
|
195
|
+
# logger.exception(e)
|
196
|
+
# return None
|
197
|
+
|
126
198
|
try:
|
127
199
|
|
128
200
|
_data = deepcopy(data)
|
@@ -134,37 +206,22 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
|
|
134
206
|
for field, value in _data.items():
|
135
207
|
|
136
208
|
# 特殊处理日期字段
|
137
|
-
|
138
|
-
|
209
|
+
is_date_field = field == "date" or field.startswith("date__")
|
210
|
+
base_field = field.replace("date", "datetime::date", 1) if is_date_field else field
|
139
211
|
|
140
|
-
if "__" in
|
212
|
+
if "__" in base_field:
|
141
213
|
|
142
|
-
base, op =
|
214
|
+
base, op = base_field.split("__", 1)
|
143
215
|
|
144
216
|
# 避免字段名冲突
|
145
|
-
param_key = f"{base}_{op}"
|
146
|
-
|
147
|
-
# 特殊处理日期字段
|
148
|
-
if param_key.startswith("datetime::date"):
|
149
|
-
param_key = param_key.replace("datetime::date", "datetime_date", 1)
|
217
|
+
param_key = f"{base.replace('.', '_')}_{op}"
|
150
218
|
|
151
219
|
if op == "like":
|
152
220
|
sql_parts.append(f"{base} LIKE :{param_key}")
|
153
221
|
param_dict[param_key] = f"%{value}%"
|
154
|
-
elif op
|
155
|
-
|
156
|
-
|
157
|
-
elif op == "gt":
|
158
|
-
sql_parts.append(f"{base} > :{param_key}")
|
159
|
-
param_dict[param_key] = value
|
160
|
-
elif op == "le":
|
161
|
-
sql_parts.append(f"{base} <= :{param_key}")
|
162
|
-
param_dict[param_key] = value
|
163
|
-
elif op == "lt":
|
164
|
-
sql_parts.append(f"{base} < :{param_key}")
|
165
|
-
param_dict[param_key] = value
|
166
|
-
elif op == "ne":
|
167
|
-
sql_parts.append(f"{base} != :{param_key}")
|
222
|
+
elif op in ("ge", "gt", "le", "lt", "ne"):
|
223
|
+
operator = {"ge": ">=", "gt": ">", "le": "<=", "lt": "<", "ne": "!="}[op]
|
224
|
+
sql_parts.append(f"{base} {operator} :{param_key}")
|
168
225
|
param_dict[param_key] = value
|
169
226
|
elif op == "in" and isinstance(value, list):
|
170
227
|
sql_parts.append(f"{base} IN :{param_key}")
|
@@ -174,21 +231,12 @@ def build_sqlalchemy_where_clause(data: dict) -> Optional[Tuple[str, Dict[str, A
|
|
174
231
|
sql_parts.append(f"{base} BETWEEN :{param_key}_start AND :{param_key}_end")
|
175
232
|
param_dict[f"{param_key}_start"] = value[0]
|
176
233
|
param_dict[f"{param_key}_end"] = value[1]
|
177
|
-
|
178
234
|
else:
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
# 特殊处理日期字段
|
183
|
-
if param_key.startswith("datetime::date"):
|
184
|
-
param_key = param_key.replace("datetime::date", "datetime_date", 1)
|
185
|
-
|
186
|
-
sql_parts.append(f"{field} = :{param_key}")
|
187
|
-
|
235
|
+
param_key = base_field.replace(".", "_")
|
236
|
+
sql_parts.append(f"{base_field} = :{param_key}")
|
188
237
|
param_dict[param_key] = value
|
189
238
|
|
190
239
|
where_clause = " AND ".join(sql_parts)
|
191
|
-
|
192
240
|
return where_clause, param_dict, bind_params
|
193
241
|
|
194
242
|
except Exception as e:
|
@@ -1,9 +1,10 @@
|
|
1
1
|
ezKit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
2
|
ezKit/_file.py,sha256=0qRZhwYuagTgTGrhm-tzAMvEQT4HTJA_xZKqF2bo0ho,1207
|
3
|
+
ezKit/auth.py,sha256=HO19O4qOz68e0YwOP04habxMCAk42B3D7LW7yKgm9ZA,398
|
3
4
|
ezKit/bottle.py,sha256=43h4v1kzz6qrLvCt5IMN0H-gFtaT0koG9wETqteXsps,181666
|
4
5
|
ezKit/bottle_extensions.py,sha256=27rogmfK7mL2qUSjXH79IMGZbCVULtYEikql_N9O6Zs,1165
|
5
6
|
ezKit/cipher.py,sha256=7jBarRH7ukSYzkz-Anl8B8JzluhnRz4CLHidPRRj_cg,2939
|
6
|
-
ezKit/database.py,sha256=
|
7
|
+
ezKit/database.py,sha256=GUU7g3XMT7IGQgyLSPhgES1gmkMM63ekvPHh17an2CM,32281
|
7
8
|
ezKit/dockerhub.py,sha256=j-wQO-71BsOgExHZhYynuy2k_hCX3on-vg0TH7QCit4,1996
|
8
9
|
ezKit/errors.py,sha256=92PggwPQfTS3Vg4og7GHYnO9CTSM7zmuh2w3kx_tSBE,1425
|
9
10
|
ezKit/fastapix.py,sha256=-nz565ASKvp3nGs9J4wORTHxlhMozqCwv8zREWpmYtI,3382
|
@@ -17,8 +18,8 @@ ezKit/token.py,sha256=Ac-i9xfq4TqpGyfCzakjrh4NYzxHiN2sCQrMk1tzVi8,1716
|
|
17
18
|
ezKit/utils.py,sha256=U457ahFkxIXuB-qWvS3995xJs-LlkFIX5_ZWVgmL5cY,43130
|
18
19
|
ezKit/xftp.py,sha256=-XQXyhMqeigT63P6sXkSS7r4GROXyqqlkzKxITLWG-g,8278
|
19
20
|
ezKit/zabbix.py,sha256=PkMnfu7mcuotwwIIsHaC9FsNg-gap6hD1xvm0AwSL1Y,33777
|
20
|
-
ezkit-1.12.
|
21
|
-
ezkit-1.12.
|
22
|
-
ezkit-1.12.
|
23
|
-
ezkit-1.12.
|
24
|
-
ezkit-1.12.
|
21
|
+
ezkit-1.12.41.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
22
|
+
ezkit-1.12.41.dist-info/METADATA,sha256=4d8g9pPedTnlzUjyW29TPj9wniRuqxuJeLPSYkeooe4,317
|
23
|
+
ezkit-1.12.41.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
24
|
+
ezkit-1.12.41.dist-info/top_level.txt,sha256=aYLB_1WODsqNTsTFWcKP-BN0KCTKcV-HZJ4zlHkCFw8,6
|
25
|
+
ezkit-1.12.41.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|