lesscode-flask 0.0.54__tar.gz → 0.0.56__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.
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/PKG-INFO +1 -1
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/__init__.py +1 -1
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/app.py +3 -3
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/log/access_log_handler.py +23 -10
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/access_log.py +7 -3
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/setup/__init__.py +3 -3
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/swagger/swagger_util.py +9 -3
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask.egg-info/PKG-INFO +1 -1
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/README.md +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/db/__init__.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/db/datasource.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/db/executor.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/auth_client.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/auth_permission.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/base_model.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/parameterized_query.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/response_result.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/user.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/access_log_service.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/auth_client_service.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/auth_permission_service.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/authentication_service.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/base_service.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/setting/__init__.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/__init__.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/decorator/__init__.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/decorator/cache.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/decorator/swagger.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/file/file_exporter.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/helpers.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/json/NotSortJSONProvider.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/oss/__init__.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/oss/ks3_oss.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/redis/redis_helper.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/request/request.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/swagger/swagger_template.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/wsgi.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask.egg-info/SOURCES.txt +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask.egg-info/dependency_links.txt +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask.egg-info/requires.txt +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask.egg-info/top_level.txt +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/query_runner/__init__.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/query_runner/clickhouse.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/query_runner/elasticsearch.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/query_runner/kingbase.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/query_runner/mysql.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/query_runner/pg.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/settings/__init__.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/settings/helpers.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/utils/__init__.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/utils/requests_session.py +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/setup.cfg +0 -0
- {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/setup.py +0 -0
|
@@ -83,10 +83,10 @@ class Lesscoder(Flask):
|
|
|
83
83
|
response = super(Lesscoder, self).full_dispatch_request()
|
|
84
84
|
# 为响应设置请求标识
|
|
85
85
|
response.headers['Request-Id'] = request_id
|
|
86
|
-
# 计算请求耗时
|
|
87
|
-
duration = time.time() - start_time
|
|
86
|
+
# # 计算请求耗时
|
|
87
|
+
# duration = time.time() - start_time
|
|
88
88
|
# 100 为自定义 'ACCESS' 的日志级别标识
|
|
89
|
-
logging.log(100,
|
|
89
|
+
logging.log(100,"访问日志", {"request_id": request_id,"start_time":start_time, "end_time": time.time(),"status_code":response.status_code})
|
|
90
90
|
return response
|
|
91
91
|
|
|
92
92
|
def dispatch_request(self) -> ft.ResponseReturnValue:
|
|
@@ -4,6 +4,7 @@ from flask import request, copy_current_request_context
|
|
|
4
4
|
from flask_login import current_user
|
|
5
5
|
import threading
|
|
6
6
|
from lesscode_flask.model.access_log import AccessLog
|
|
7
|
+
from lesscode_flask.model.user import AnonymousUser, ApiUser, User
|
|
7
8
|
|
|
8
9
|
from lesscode_flask.service.access_log_service import AccessLogService
|
|
9
10
|
from lesscode_flask.utils.helpers import app_config
|
|
@@ -31,26 +32,38 @@ class AccessLogHandler(Handler):
|
|
|
31
32
|
if request.mimetype == 'application/json' and request.json is not None:
|
|
32
33
|
params["json"] = request.json
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
args = record.args
|
|
36
|
+
request_id = args.get("request_id")
|
|
37
|
+
start_time = args.get("start_time")
|
|
38
|
+
end_time = args.get("end_time")
|
|
39
|
+
status_code = args.get("status_code")
|
|
37
40
|
user_agent_string = request.headers.get('user-agent')
|
|
38
41
|
url = request.path
|
|
39
42
|
url_info_key = f"upms:url_info:{url}"
|
|
40
43
|
|
|
41
44
|
resource_id = "-"
|
|
42
45
|
resource_label = "-"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
try:
|
|
47
|
+
url_info = RedisHelper(app_config.get("REDIS_OAUTH_KEY", "redis")).sync_hgetall(url_info_key)
|
|
48
|
+
if url_info:
|
|
49
|
+
resource_id = url_info.get("id", "-")
|
|
50
|
+
resource_label = url_info.get("label", "-")
|
|
51
|
+
except Exception as e:
|
|
52
|
+
pass
|
|
53
|
+
'请求类型0:用户请求,1:API用户,2:匿名用户',
|
|
54
|
+
if isinstance(current_user, AnonymousUser):
|
|
55
|
+
type = 2
|
|
56
|
+
elif isinstance(current_user, ApiUser):
|
|
57
|
+
type = 1
|
|
58
|
+
else:
|
|
59
|
+
type = 0
|
|
47
60
|
|
|
48
61
|
access_log = AccessLog(request_id=request_id, display_name=current_user.display_name,
|
|
49
|
-
|
|
62
|
+
obj_id=current_user.id, type=type,
|
|
50
63
|
resource_id=resource_id,
|
|
51
64
|
resource_label=resource_label, url=url, referrer=referrer, client_ip=client_ip,
|
|
52
|
-
user_agent=user_agent_string,
|
|
53
|
-
params=params
|
|
65
|
+
user_agent=user_agent_string,start_time=start_time, end_time=end_time, duration = end_time-start_time,status_code =status_code,
|
|
66
|
+
params=params)
|
|
54
67
|
|
|
55
68
|
@copy_current_request_context
|
|
56
69
|
def thread_function(access_log):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from lesscode_flask.model.base_model import BaseModel
|
|
2
2
|
from lesscode_flask.utils.helpers import generate_uuid
|
|
3
|
-
from sqlalchemy import Column, DateTime, JSON, text, String, Integer, Float
|
|
3
|
+
from sqlalchemy import Column, DateTime, JSON, text, String, Integer, Float,DOUBLE
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class AccessLog(BaseModel):
|
|
@@ -11,7 +11,8 @@ class AccessLog(BaseModel):
|
|
|
11
11
|
id = Column(String(32), primary_key=True, insert_default=generate_uuid)
|
|
12
12
|
request_id = Column(String(32), comment='请求id')
|
|
13
13
|
display_name = Column(String(64), comment='显示名')
|
|
14
|
-
|
|
14
|
+
obj_id = Column(String(255), comment='对象标识')
|
|
15
|
+
type = Column(Integer, comment='请求类型0:用户请求,1:API用户,2:匿名用户')
|
|
15
16
|
resource_id = Column(String(32), comment='资源id)')
|
|
16
17
|
resource_label = Column(String(128), comment='菜单显示名(操作)')
|
|
17
18
|
url = Column(String(255), comment='访问地址')
|
|
@@ -19,7 +20,10 @@ class AccessLog(BaseModel):
|
|
|
19
20
|
client_ip = Column(String(255), comment='客户端ip')
|
|
20
21
|
user_agent = Column(String(512), comment='客户端')
|
|
21
22
|
params = Column(JSON)
|
|
22
|
-
|
|
23
|
+
start_time = Column(DOUBLE, comment='开始时间')
|
|
24
|
+
end_time = Column(DOUBLE, comment='结束时间')
|
|
25
|
+
duration = Column(DOUBLE, comment='耗时')
|
|
26
|
+
status_code = Column(Integer, comment='响应状态码')
|
|
23
27
|
create_user_id = Column(String(36), nullable=False, comment='创建人id')
|
|
24
28
|
create_user_name = Column(String(36), nullable=False, comment='创建人用户名')
|
|
25
29
|
create_time = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"), comment='创建时间')
|
|
@@ -212,7 +212,7 @@ def setup_resource_register(app):
|
|
|
212
212
|
}
|
|
213
213
|
if param.default is inspect.Parameter.empty:
|
|
214
214
|
param_info["required"] = 1
|
|
215
|
-
param_info["example"] = get_sample_data(param
|
|
215
|
+
param_info["example"] = get_sample_data(get_params_type(param))
|
|
216
216
|
else:
|
|
217
217
|
param_info["required"] = 0
|
|
218
218
|
param_info["default"] = param.default
|
|
@@ -245,7 +245,7 @@ def setup_resource_register(app):
|
|
|
245
245
|
# 如果默认值是空,则是必填参数
|
|
246
246
|
if param.default is inspect.Parameter.empty:
|
|
247
247
|
|
|
248
|
-
param_info["example"] = get_sample_data(param
|
|
248
|
+
param_info["example"] = get_sample_data(get_params_type(param))
|
|
249
249
|
param_info["required"] = 1
|
|
250
250
|
else:
|
|
251
251
|
param_info["default"] = param.default
|
|
@@ -253,7 +253,7 @@ def setup_resource_register(app):
|
|
|
253
253
|
if param.default is not None:
|
|
254
254
|
param_info["example"] = param.default
|
|
255
255
|
else:
|
|
256
|
-
param_info["example"] = get_sample_data(param
|
|
256
|
+
param_info["example"] = get_sample_data(get_params_type(param))
|
|
257
257
|
# 如果参数类型是FileStorage 则swagger中format为binary 显示导入文件
|
|
258
258
|
if param.annotation.__name__ == "FileStorage":
|
|
259
259
|
param_info["format"] = "binary"
|
{lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/swagger/swagger_util.py
RENAMED
|
@@ -88,7 +88,13 @@ def get_sample_data(type):
|
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
def get_params_type(param):
|
|
91
|
-
|
|
91
|
+
if hasattr(param.annotation, "__name__"):
|
|
92
|
+
type = param.annotation.__name__
|
|
93
|
+
elif hasattr(param.annotation, "_name"):
|
|
94
|
+
type = param.annotation._name
|
|
95
|
+
else:
|
|
96
|
+
type = ""
|
|
97
|
+
|
|
92
98
|
if type == "FileStorage":
|
|
93
99
|
return "string"
|
|
94
100
|
else:
|
|
@@ -122,13 +128,13 @@ def extract_post_body(view_func, not_allow_list=None, param_desc_dict=None):
|
|
|
122
128
|
if (not_allow_list and arg not in not_allow_list) or not not_allow_list:
|
|
123
129
|
required.append(arg)
|
|
124
130
|
|
|
125
|
-
param_info["example"] = get_sample_data(param
|
|
131
|
+
param_info["example"] = get_sample_data(get_params_type(param))
|
|
126
132
|
else:
|
|
127
133
|
param_info["default"] = param.default
|
|
128
134
|
if param.default is not None:
|
|
129
135
|
param_info["example"] = param.default
|
|
130
136
|
else:
|
|
131
|
-
param_info["example"] = get_sample_data(param
|
|
137
|
+
param_info["example"] = get_sample_data(get_params_type(param))
|
|
132
138
|
# 如果参数类型是FileStorage 则swagger中format为binary 显示导入文件
|
|
133
139
|
if param.annotation.__name__ == "FileStorage":
|
|
134
140
|
param_info["format"] = "binary"
|
|
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
|
{lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/access_log_service.py
RENAMED
|
File without changes
|
{lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/auth_client_service.py
RENAMED
|
File without changes
|
{lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/auth_permission_service.py
RENAMED
|
File without changes
|
{lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/authentication_service.py
RENAMED
|
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
|
{lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/json/NotSortJSONProvider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/swagger/swagger_template.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask.egg-info/dependency_links.txt
RENAMED
|
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
|