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.
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/PKG-INFO +1 -1
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/__init__.py +1 -1
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/app.py +6 -5
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/model/user.py +17 -14
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/request/request.py +41 -23
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask.egg-info/PKG-INFO +1 -1
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/README.md +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/db/__init__.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/db/datasource.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/db/executor.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/export_data/__init__.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/export_data/data_download_handler.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/log/access_log_handler.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/model/access_log.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/model/base_model.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/model/parameterized_query.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/model/response_result.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/service/access_log_service.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/service/base_service.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/setting/__init__.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/setup/__init__.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/__init__.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/decorator/__init__.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/decorator/cache.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/decorator/swagger.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/file/file_exporter.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/helpers.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/json/NotSortJSONProvider.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/oss/__init__.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/oss/ks3_oss.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/redis/redis_helper.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/swagger/swagger_template.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/swagger/swagger_util.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/thread/thread_utils.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/wsgi.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask.egg-info/SOURCES.txt +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask.egg-info/dependency_links.txt +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask.egg-info/requires.txt +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask.egg-info/top_level.txt +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/query_runner/__init__.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/query_runner/clickhouse.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/query_runner/elasticsearch.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/query_runner/kingbase.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/query_runner/mysql.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/query_runner/pg.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/settings/__init__.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/settings/helpers.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/utils/__init__.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/redash/utils/requests_session.py +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/setup.cfg +0 -0
- {lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/setup.py +0 -0
|
@@ -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
|
|
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
|
-
"
|
|
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
|
-
|
|
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),
|
|
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
|
|
8
|
-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
res =
|
|
27
|
-
if
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
-
|
|
43
|
-
|
|
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):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/export_data/data_download_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/service/access_log_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
|
|
File without changes
|
{lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/json/NotSortJSONProvider.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/swagger/swagger_template.py
RENAMED
|
File without changes
|
{lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/lesscode_flask/utils/swagger/swagger_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode-flask-0.0.94 → lesscode-flask-0.0.96}/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
|