lesscode-flask 0.0.94__tar.gz → 0.0.96__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 (51) hide show
  1. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/PKG-INFO +1 -1
  2. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/__init__.py +1 -1
  3. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/app.py +6 -5
  4. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/model/user.py +17 -14
  5. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/request/request.py +41 -23
  6. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask.egg-info/PKG-INFO +1 -1
  7. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/README.md +0 -0
  8. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/db/__init__.py +0 -0
  9. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/db/datasource.py +0 -0
  10. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/db/executor.py +0 -0
  11. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/export_data/__init__.py +0 -0
  12. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/export_data/data_download_handler.py +0 -0
  13. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/log/access_log_handler.py +0 -0
  14. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/model/access_log.py +0 -0
  15. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/model/base_model.py +0 -0
  16. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/model/parameterized_query.py +0 -0
  17. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/model/response_result.py +0 -0
  18. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/service/access_log_service.py +0 -0
  19. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/service/base_service.py +0 -0
  20. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/setting/__init__.py +0 -0
  21. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/setup/__init__.py +0 -0
  22. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/__init__.py +0 -0
  23. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/decorator/__init__.py +0 -0
  24. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/decorator/cache.py +0 -0
  25. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/decorator/swagger.py +0 -0
  26. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/file/file_exporter.py +0 -0
  27. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/helpers.py +0 -0
  28. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/json/NotSortJSONProvider.py +0 -0
  29. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/oss/__init__.py +0 -0
  30. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/oss/ks3_oss.py +0 -0
  31. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/redis/redis_helper.py +0 -0
  32. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/swagger/swagger_template.py +0 -0
  33. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/swagger/swagger_util.py +0 -0
  34. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/thread/thread_utils.py +0 -0
  35. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/wsgi.py +0 -0
  36. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask.egg-info/SOURCES.txt +0 -0
  37. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask.egg-info/dependency_links.txt +0 -0
  38. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask.egg-info/requires.txt +0 -0
  39. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask.egg-info/top_level.txt +0 -0
  40. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/query_runner/__init__.py +0 -0
  41. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/query_runner/clickhouse.py +0 -0
  42. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/query_runner/elasticsearch.py +0 -0
  43. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/query_runner/kingbase.py +0 -0
  44. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/query_runner/mysql.py +0 -0
  45. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/query_runner/pg.py +0 -0
  46. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/settings/__init__.py +0 -0
  47. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/settings/helpers.py +0 -0
  48. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/utils/__init__.py +0 -0
  49. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/utils/requests_session.py +0 -0
  50. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/setup.cfg +0 -0
  51. {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lesscode-flask
3
- Version: 0.0.94
3
+ Version: 0.0.96
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.94'
1
+ __version__ = '0.0.96'
2
2
 
3
3
  import functools
4
4
  import logging
@@ -53,6 +53,7 @@ class Lesscoder(Flask):
53
53
  self.register_error_handler(Exception, self.handle_exception)
54
54
 
55
55
  def preprocess_request(self) -> ft.ResponseReturnValue | None:
56
+ v = super(Lesscoder, self).preprocess_request()
56
57
  if self.config.get("AUTHORIZATION_ENABLE"): # 启动 AUTHORIZATION_ENABLE 才进行权限验证
57
58
  try:
58
59
  flask_login = import_module("flask_login")
@@ -71,13 +72,13 @@ class Lesscoder(Flask):
71
72
  if str(access) == "1": # 需要登录
72
73
  if current_user.is_anonymous_user:
73
74
  # abort(403, "需要登录")
74
- ResponseResult.fail("请登录后访问", status_code="403")
75
+ ResponseResult.fail("请登录后访问", status_code="403",http_code="403")
75
76
  elif str(access) == "2": # 需要权限
76
77
  if current_user.is_anonymous_user:
77
- ResponseResult.fail("请登录后访问", status_code="403")
78
+ ResponseResult.fail("请登录后访问", status_code="403",http_code="403")
78
79
  if not current_user.has_permission(id):
79
- ResponseResult.fail("请获取授权后访问", status_code="403")
80
- return super(Lesscoder, self).preprocess_request()
80
+ ResponseResult.fail("请获取授权后访问", status_code="403",http_code="403")
81
+ return v
81
82
 
82
83
  def full_dispatch_request(self) -> Response:
83
84
  # 生成请求标识
@@ -131,7 +132,7 @@ class Lesscoder(Flask):
131
132
  return result
132
133
  try:
133
134
  # 判断返回结构是否是json,不是json则不包装
134
- json.dumps(result, cls=JSONEncoder)
135
+ json.dumps(result, cls=JSONEncoder, ensure_ascii=False)
135
136
  return ResponseResult(data=result)
136
137
  except Exception as e:
137
138
  print(e)
@@ -60,6 +60,7 @@ class User(flask_login.UserMixin, PermissionsCheckMixin):
60
60
  # self.roleIds = roleIds
61
61
 
62
62
  #
63
+ @property
63
64
  def is_anonymous_user(self):
64
65
  """
65
66
  判断是否是匿名用户
@@ -67,6 +68,7 @@ class User(flask_login.UserMixin, PermissionsCheckMixin):
67
68
  """
68
69
  return self.type == 0
69
70
 
71
+ @property
70
72
  def is_user(self):
71
73
  """
72
74
  判断是否是普通用户
@@ -74,6 +76,7 @@ class User(flask_login.UserMixin, PermissionsCheckMixin):
74
76
  """
75
77
  return self.type == 1
76
78
 
79
+ @property
77
80
  def is_api_user(self):
78
81
  """
79
82
  判断是否是API用户
@@ -81,6 +84,7 @@ class User(flask_login.UserMixin, PermissionsCheckMixin):
81
84
  """
82
85
  return self.type == 2
83
86
 
87
+ @property
84
88
  def is_client_user(self):
85
89
  """
86
90
  判断是否是客户端用户
@@ -107,18 +111,27 @@ class User(flask_login.UserMixin, PermissionsCheckMixin):
107
111
  "email": self.email if self.email else "",
108
112
  "type": self.type if self.type else "",
109
113
  "account_status": self.account_status,
110
- "permissions": json.dumps(self.permissions)
114
+ "client_id": self.client_id,
115
+ "permissions": json.dumps(self.permissions),
116
+ "permissions_url": json.dumps(self.permissions_url)
111
117
  }
112
118
 
113
119
  @staticmethod
114
120
  def to_user(user_data):
115
121
  if not isinstance(user_data, dict):
116
122
  user_data = user_data.__dict__
117
- return User(id=user_data.get("id"), username=user_data.get("username", ""),
123
+ user = User(id=user_data.get("id"), username=user_data.get("username", ""),
118
124
  display_name=user_data.get("display_name", ""), phone_no=user_data.get("phone_no", ""),
119
125
  email=user_data.get("email", ""), type=user_data.get("type", 0),
120
- account_status=user_data.get("account_status", 1), permissions=user_data.get("permissions", []),
126
+ account_status=user_data.get("account_status", 1),
121
127
  client_id=user_data.get("client_id", ""))
128
+ permissions = user_data.get("permissions", [])
129
+ if isinstance(permissions, str):
130
+ user.permissions = json.loads(permissions)
131
+ permissions_url = user_data.get("permissions_url", [])
132
+ if isinstance(permissions_url, str):
133
+ user.permissions_url = json.loads(permissions_url)
134
+ return user
122
135
 
123
136
  @staticmethod
124
137
  def get_user(request):
@@ -188,16 +201,7 @@ class User(flask_login.UserMixin, PermissionsCheckMixin):
188
201
  # 检查是否获取到了用户数据
189
202
  if user_dict:
190
203
  # 创建并返回User对象
191
- user = User(
192
- id=user_dict.get("id"),
193
- username=user_dict.get("username"),
194
- display_name=user_dict.get("display_name"),
195
- phone_no=user_dict.get("phone_no"),
196
- email=user_dict.get("email"),
197
- permissions=json.loads(user_dict.get("permissions")) if user_dict.get(
198
- "permissions") is not None else [],
199
- client_id=user_dict.get("client_id")
200
- )
204
+ user = User.to_user(user_dict)
201
205
  return user
202
206
  return User()
203
207
 
@@ -215,4 +219,3 @@ class User(flask_login.UserMixin, PermissionsCheckMixin):
215
219
  user = User.to_user(user_dict)
216
220
  return user
217
221
  return User()
218
-
@@ -4,12 +4,32 @@ import uuid
4
4
  from flask import current_app, abort
5
5
 
6
6
 
7
- def sync_common_request(method, path, params=None, data=None, json=None, base_url=None, result_type="json",
8
- pack=False, connect_config=None, **kwargs):
7
+ def get_basic_auth(username, password):
8
+ try:
9
+ httpx = importlib.import_module("httpx")
10
+ except ImportError as e:
11
+ raise Exception(f"httpx is not exist,run:pip install httpx==0.24.1")
12
+ return httpx.BasicAuth(username, password)
13
+
14
+
15
+ def sync_common_request_origin(url, method, params=None, data=None, json=None, connect_config=None,
16
+ **kwargs):
17
+ if not connect_config or not isinstance(connect_config, dict):
18
+ connect_config = {"timeout": None}
9
19
  try:
10
20
  httpx = importlib.import_module("httpx")
11
21
  except ImportError as e:
12
22
  raise Exception(f"httpx is not exist,run:pip install httpx==0.24.1")
23
+ with httpx.Client(**connect_config) as session:
24
+ try:
25
+ res = session.request(method.upper(), url=url, params=params, data=data, json=json, **kwargs)
26
+ return res
27
+ except Exception as e:
28
+ raise e
29
+
30
+
31
+ def sync_common_request(method, path, params=None, data=None, json=None, base_url=None, result_type="json",
32
+ pack=False, connect_config=None, **kwargs):
13
33
  if not base_url:
14
34
  base_url = current_app.config.get("CAPABILITY_PLATFORM_SERVER", "")
15
35
  headers = kwargs.get("headers", {})
@@ -19,28 +39,26 @@ def sync_common_request(method, path, params=None, data=None, json=None, base_ur
19
39
  project_name = current_app.config.get("PROJECT_NAME", "").encode("utf-8")
20
40
  headers["Project-Name"] = project_name
21
41
  kwargs["headers"] = headers
22
- if not connect_config or not isinstance(connect_config, dict):
23
- connect_config = {"timeout": None}
24
- with httpx.Client(**connect_config) as session:
25
- try:
26
- res = session.request(method.upper(), url=base_url + path, params=params, data=data, json=json, **kwargs)
27
- if result_type == "json":
28
- res = res.json()
29
- if not pack:
30
- if res.get("status") == "00000":
31
- res = res.get("data")
32
- else:
33
- message = f'ori_message:{res.get("status", "")}, {res.get("message", "未知错误")}'
34
- abort("500", message)
35
- elif result_type == "text":
36
- res = res.text
37
- elif result_type == "origin":
38
- return res
39
- else:
40
- res = res.content
42
+ try:
43
+ res = sync_common_request_origin(url=base_url + path, method=method.upper(), params=params, data=data,
44
+ json=json, connect_config=connect_config, **kwargs)
45
+ if result_type == "json":
46
+ res = res.json()
47
+ if not pack:
48
+ if res.get("status") == "00000":
49
+ res = res.get("data")
50
+ else:
51
+ message = f'ori_message:{res.get("status", "")}, {res.get("message", "未知错误")}'
52
+ abort("500", message)
53
+ elif result_type == "text":
54
+ res = res.text
55
+ elif result_type == "origin":
41
56
  return res
42
- except Exception as e:
43
- raise e
57
+ else:
58
+ res = res.content
59
+ return res
60
+ except Exception as e:
61
+ raise e
44
62
 
45
63
 
46
64
  def sync_get(path, params=None, base_url=None, result_type="json", pack=False, connect_config=None, **kwargs):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lesscode-flask
3
- Version: 0.0.94
3
+ Version: 0.0.96
4
4
  Summary: lesscode-flask 是基于flask的web开发脚手架项目,该项目初衷为简化开发过程,让研发人员更加关注业务。
5
5
  Home-page: https://lesscode-flask
6
6
  Author: Chao.yy