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.
Files changed (53) hide show
  1. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/PKG-INFO +1 -1
  2. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/__init__.py +1 -1
  3. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/app.py +3 -3
  4. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/log/access_log_handler.py +23 -10
  5. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/access_log.py +7 -3
  6. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/setup/__init__.py +3 -3
  7. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/swagger/swagger_util.py +9 -3
  8. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask.egg-info/PKG-INFO +1 -1
  9. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/README.md +0 -0
  10. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/db/__init__.py +0 -0
  11. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/db/datasource.py +0 -0
  12. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/db/executor.py +0 -0
  13. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/auth_client.py +0 -0
  14. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/auth_permission.py +0 -0
  15. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/base_model.py +0 -0
  16. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/parameterized_query.py +0 -0
  17. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/response_result.py +0 -0
  18. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/model/user.py +0 -0
  19. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/access_log_service.py +0 -0
  20. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/auth_client_service.py +0 -0
  21. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/auth_permission_service.py +0 -0
  22. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/authentication_service.py +0 -0
  23. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/service/base_service.py +0 -0
  24. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/setting/__init__.py +0 -0
  25. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/__init__.py +0 -0
  26. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/decorator/__init__.py +0 -0
  27. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/decorator/cache.py +0 -0
  28. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/decorator/swagger.py +0 -0
  29. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/file/file_exporter.py +0 -0
  30. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/helpers.py +0 -0
  31. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/json/NotSortJSONProvider.py +0 -0
  32. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/oss/__init__.py +0 -0
  33. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/oss/ks3_oss.py +0 -0
  34. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/redis/redis_helper.py +0 -0
  35. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/request/request.py +0 -0
  36. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/utils/swagger/swagger_template.py +0 -0
  37. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask/wsgi.py +0 -0
  38. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask.egg-info/SOURCES.txt +0 -0
  39. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask.egg-info/dependency_links.txt +0 -0
  40. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask.egg-info/requires.txt +0 -0
  41. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/lesscode_flask.egg-info/top_level.txt +0 -0
  42. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/query_runner/__init__.py +0 -0
  43. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/query_runner/clickhouse.py +0 -0
  44. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/query_runner/elasticsearch.py +0 -0
  45. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/query_runner/kingbase.py +0 -0
  46. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/query_runner/mysql.py +0 -0
  47. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/query_runner/pg.py +0 -0
  48. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/settings/__init__.py +0 -0
  49. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/settings/helpers.py +0 -0
  50. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/utils/__init__.py +0 -0
  51. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/redash/utils/requests_session.py +0 -0
  52. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/setup.cfg +0 -0
  53. {lesscode_flask-0.0.54 → lesscode_flask-0.0.56}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lesscode-flask
3
- Version: 0.0.54
3
+ Version: 0.0.56
4
4
  Summary: lesscode-flask 是基于flask的web开发脚手架项目,该项目初衷为简化开发过程,让研发人员更加关注业务。
5
5
  Home-page: https://lesscode-flask
6
6
  Author: Chao.yy
@@ -1,4 +1,4 @@
1
- __version__ = '0.0.54'
1
+ __version__ = '0.0.56'
2
2
 
3
3
  import functools
4
4
  import logging
@@ -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, duration, {"request_id": request_id, "duration": duration})
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
- request_id = request.headers.get('Request-Id')
35
- if request_id is None:
36
- request_id = request.request_id
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
- url_info = RedisHelper(app_config.get("REDIS_OAUTH_KEY", "redis")).sync_hgetall(url_info_key)
44
- if url_info:
45
- resource_id = url_info.get("id", "-")
46
- resource_label = url_info.get("label", "-")
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
- phone_no=current_user.phone_no,
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, duration=record.message)
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
- phone_no = Column(String(255), comment='手机号')
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
- duration = Column(Float, comment='请求耗时')
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.annotation.__name__)
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.annotation.__name__)
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.annotation.__name__)
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"
@@ -88,7 +88,13 @@ def get_sample_data(type):
88
88
 
89
89
 
90
90
  def get_params_type(param):
91
- type = param.annotation.__name__
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.annotation.__name__)
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.annotation.__name__)
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"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lesscode-flask
3
- Version: 0.0.54
3
+ Version: 0.0.56
4
4
  Summary: lesscode-flask 是基于flask的web开发脚手架项目,该项目初衷为简化开发过程,让研发人员更加关注业务。
5
5
  Home-page: https://lesscode-flask
6
6
  Author: Chao.yy