lesscode-flask 0.1.53__tar.gz → 0.1.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.1.53 → lesscode_flask-0.1.56}/PKG-INFO +1 -1
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/__init__.py +1 -1
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/app.py +3 -1
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/model/user.py +15 -4
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/setting/__init__.py +3 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/setup/__init__.py +89 -2
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask.egg-info/PKG-INFO +1 -1
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/README.md +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/db/__init__.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/db/datasource.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/db/executor.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/export_data/__init__.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/export_data/data_download_handler.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/log/access_log_handler.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/model/access_log.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/model/base_model.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/model/parameterized_query.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/model/resource_param_template.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/model/response_result.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/service/access_log_service.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/service/base_service.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/service/resource_param_template_service.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/signals.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/static/swagger.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/__init__.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/decorator/__init__.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/decorator/cache.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/decorator/swagger.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/file/file_exporter.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/file/file_utils.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/helpers.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/json/NotSortJSONProvider.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/oss/__init__.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/oss/ks3_oss.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/redis/redis_helper.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/request/request.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/swagger/swagger_template.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/swagger/swagger_util.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/task/__init__.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/task/task_helper.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/thread/thread_utils.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/wsgi.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask.egg-info/SOURCES.txt +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask.egg-info/dependency_links.txt +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask.egg-info/requires.txt +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask.egg-info/top_level.txt +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/redash/query_runner/__init__.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/redash/query_runner/clickhouse.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/redash/query_runner/elasticsearch.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/redash/query_runner/kingbase.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/redash/query_runner/mysql.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/redash/query_runner/pg.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/redash/settings/__init__.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/redash/settings/helpers.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/redash/utils/__init__.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/redash/utils/requests_session.py +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/setup.cfg +0 -0
- {lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/setup.py +0 -0
|
@@ -17,7 +17,8 @@ from werkzeug.middleware.proxy_fix import ProxyFix
|
|
|
17
17
|
|
|
18
18
|
from lesscode_flask.model.response_result import ResponseResult
|
|
19
19
|
from lesscode_flask.setup import setup_blueprint, setup_logging, setup_query_runner, setup_swagger, setup_sql_alchemy, \
|
|
20
|
-
setup_redis, setup_login_manager, setup_resource_register, setup_data_download, setup_scheduler
|
|
20
|
+
setup_redis, setup_login_manager, setup_resource_register, setup_data_download, setup_scheduler, \
|
|
21
|
+
setup_common_resource
|
|
21
22
|
from lesscode_flask.signals import app_runed
|
|
22
23
|
from lesscode_flask.utils.helpers import inject_args, generate_uuid, app_config
|
|
23
24
|
from lesscode_flask.utils.json.NotSortJSONProvider import NotSortJSONProvider
|
|
@@ -146,6 +147,7 @@ class Lesscoder(Flask):
|
|
|
146
147
|
setup_login_manager(self)
|
|
147
148
|
for blueprint_name, blueprint in blueprint_map.items():
|
|
148
149
|
self.register_blueprint(blueprint)
|
|
150
|
+
setup_common_resource(self)
|
|
149
151
|
setup_resource_register(self)
|
|
150
152
|
setup_data_download(self)
|
|
151
153
|
setup_scheduler(self)
|
|
@@ -33,7 +33,7 @@ class User(flask_login.UserMixin, PermissionsCheckMixin):
|
|
|
33
33
|
|
|
34
34
|
def __init__(self, id="AnonymousUserId", username="AnonymousUser", display_name="匿名用户", phone_no: str = None,
|
|
35
35
|
email: str = None,
|
|
36
|
-
type: int = 0, account_status: str = None, permissions=[], permissions_url=[], client_id: str = None,
|
|
36
|
+
type: int = 0, account_status: str = None, permissions=[], permissions_url=[],roleIds=[], client_id: str = None,
|
|
37
37
|
sub: str = None):
|
|
38
38
|
# '账号id',
|
|
39
39
|
self.id = id
|
|
@@ -59,7 +59,7 @@ class User(flask_login.UserMixin, PermissionsCheckMixin):
|
|
|
59
59
|
# 权限集合(url)
|
|
60
60
|
self.permissions_url = permissions_url
|
|
61
61
|
# # 角色集合
|
|
62
|
-
|
|
62
|
+
self.roleIds = roleIds
|
|
63
63
|
|
|
64
64
|
#
|
|
65
65
|
@property
|
|
@@ -116,7 +116,9 @@ class User(flask_login.UserMixin, PermissionsCheckMixin):
|
|
|
116
116
|
"client_id": self.client_id,
|
|
117
117
|
"sub": self.sub if self.sub else "",
|
|
118
118
|
"permissions": json.dumps(self.permissions),
|
|
119
|
-
"permissions_url": json.dumps(self.permissions_url)
|
|
119
|
+
"permissions_url": json.dumps(self.permissions_url),
|
|
120
|
+
"roleIds": json.dumps(self.roleIds)
|
|
121
|
+
|
|
120
122
|
}
|
|
121
123
|
|
|
122
124
|
@staticmethod
|
|
@@ -131,9 +133,18 @@ class User(flask_login.UserMixin, PermissionsCheckMixin):
|
|
|
131
133
|
permissions = user_data.get("permissions", [])
|
|
132
134
|
if isinstance(permissions, str):
|
|
133
135
|
user.permissions = json.loads(permissions)
|
|
136
|
+
else:
|
|
137
|
+
user.permissions = permissions
|
|
134
138
|
permissions_url = user_data.get("permissions_url", [])
|
|
135
139
|
if isinstance(permissions_url, str):
|
|
136
140
|
user.permissions_url = json.loads(permissions_url)
|
|
141
|
+
else:
|
|
142
|
+
user.permissions_url = permissions_url
|
|
143
|
+
roleIds = user_data.get("roleIds", [])
|
|
144
|
+
if isinstance(roleIds, str):
|
|
145
|
+
user.roleIds = json.loads(roleIds)
|
|
146
|
+
else:
|
|
147
|
+
user.roleIds = roleIds
|
|
137
148
|
return user
|
|
138
149
|
|
|
139
150
|
@staticmethod
|
|
@@ -174,7 +185,7 @@ class User(flask_login.UserMixin, PermissionsCheckMixin):
|
|
|
174
185
|
display_name=unquote(user_dict["display_name"]),
|
|
175
186
|
phone_no=user_dict["phone_no"],
|
|
176
187
|
permissions=user_dict.get("permissions", []),
|
|
177
|
-
|
|
188
|
+
roleIds=user_dict["roleIds"],
|
|
178
189
|
client_id=user_dict["client_id"]
|
|
179
190
|
)
|
|
180
191
|
return user
|
|
@@ -4,14 +4,17 @@ from datetime import datetime
|
|
|
4
4
|
from importlib import import_module
|
|
5
5
|
from logging.handlers import TimedRotatingFileHandler
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
import requests
|
|
8
|
+
from flask import current_app, Response, request
|
|
8
9
|
|
|
9
|
-
from lesscode_flask import download_func_dict
|
|
10
|
+
from lesscode_flask import download_func_dict, SQ_Blueprint
|
|
10
11
|
from lesscode_flask.db import db
|
|
11
12
|
from lesscode_flask.export_data.data_download_handler import format_to_table_download, upload_result_url
|
|
12
13
|
from lesscode_flask.log.access_log_handler import AccessLogHandler
|
|
13
14
|
from lesscode_flask.model.user import User
|
|
14
15
|
from lesscode_flask.utils.file.file_utils import check_or_create_dir
|
|
16
|
+
from lesscode_flask.utils.helpers import app_config
|
|
17
|
+
from lesscode_flask.utils.request.request import sync_get, sync_post
|
|
15
18
|
from lesscode_flask.utils.swagger.swagger_template import split_doc
|
|
16
19
|
from lesscode_flask.utils.swagger.swagger_util import generate_openapi_spec, replace_symbol, get_params_type, \
|
|
17
20
|
get_sample_data
|
|
@@ -446,3 +449,87 @@ def setup_scheduler(app):
|
|
|
446
449
|
task_kwargs = task.get("task_kwargs", {}) or dict()
|
|
447
450
|
if task_enable:
|
|
448
451
|
scheduler.add_job(func=task_func, kwargs=func_kwargs, **task_kwargs)
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
def setup_common_resource(app):
|
|
455
|
+
routes = SQ_Blueprint("Oauth授权管理", url_prefix=f'{app.config.get("ROUTE_PREFIX", "")}/oauth')
|
|
456
|
+
|
|
457
|
+
# def capacity_post(path, data=None):
|
|
458
|
+
# headers = {}
|
|
459
|
+
# res = sync_post(path=path, data=data, base_url=app_config.get("CAPACITY_SERVER"),
|
|
460
|
+
# headers=headers)
|
|
461
|
+
# return res
|
|
462
|
+
|
|
463
|
+
def capacity_get(path, params=None, result_type="json", headers=None):
|
|
464
|
+
res = sync_get(path=path, params=params, base_url=app_config.get("CAPACITY_SERVER"),
|
|
465
|
+
headers=headers, result_type=result_type)
|
|
466
|
+
return res
|
|
467
|
+
|
|
468
|
+
@routes.get_route("获取图形验证码", '/captcha')
|
|
469
|
+
def get_captcha(key):
|
|
470
|
+
resp = requests.get(app_config.get("CAPACITY_SERVER") + "/oauth/captcha", params={
|
|
471
|
+
"key": key
|
|
472
|
+
}, stream=True)
|
|
473
|
+
return Response(
|
|
474
|
+
resp.content,
|
|
475
|
+
content_type=resp.headers["Content-Type"],
|
|
476
|
+
status=resp.status_code
|
|
477
|
+
)
|
|
478
|
+
|
|
479
|
+
# @routes.post_route("登录", '/token')
|
|
480
|
+
# def issue_token():
|
|
481
|
+
# """
|
|
482
|
+
# 获取token
|
|
483
|
+
# :return:
|
|
484
|
+
# """
|
|
485
|
+
# headers = {key: value for key, value in request.headers if key.lower() != 'host'}
|
|
486
|
+
#
|
|
487
|
+
# # 读取 form-data 参数
|
|
488
|
+
# data = request.form.to_dict()
|
|
489
|
+
#
|
|
490
|
+
# # 代理请求到 B 项目的 /token 接口
|
|
491
|
+
# resp = requests.post(app_config.get("CAPACITY_SERVER") + "/oauth/captcha", headers=headers, data=data)
|
|
492
|
+
#
|
|
493
|
+
# return resp
|
|
494
|
+
|
|
495
|
+
@routes.get_route("登出接口", '/logout')
|
|
496
|
+
def logout():
|
|
497
|
+
headers = {key: value for key, value in request.headers if key.lower() != 'host'}
|
|
498
|
+
|
|
499
|
+
result = capacity_get("/oauth/logout", headers=headers)
|
|
500
|
+
|
|
501
|
+
return result
|
|
502
|
+
|
|
503
|
+
@routes.get_route("获取短信验证码", '/sms')
|
|
504
|
+
def get_sms_code(phone_no: str, template_code: str = None, sign_name: str = None):
|
|
505
|
+
"""
|
|
506
|
+
发送短信验证码
|
|
507
|
+
:param sign_name:
|
|
508
|
+
:param template_code:
|
|
509
|
+
:param phone_no:手机号
|
|
510
|
+
:return:
|
|
511
|
+
"""
|
|
512
|
+
headers = {key: value for key, value in request.headers if key.lower() != 'host'}
|
|
513
|
+
|
|
514
|
+
result = capacity_get("/oauth/sms", headers=headers, params={
|
|
515
|
+
"phone_no": phone_no,
|
|
516
|
+
"template_code": template_code,
|
|
517
|
+
"sign_name": sign_name,
|
|
518
|
+
})
|
|
519
|
+
return result
|
|
520
|
+
|
|
521
|
+
@routes.get_route('获取当前用户信息', '/user_info')
|
|
522
|
+
def user_info():
|
|
523
|
+
"""
|
|
524
|
+
获取当前用户信息
|
|
525
|
+
:return:
|
|
526
|
+
"""
|
|
527
|
+
headers = {key: value for key, value in request.headers if key.lower() != 'host'}
|
|
528
|
+
|
|
529
|
+
result = capacity_get("/oauth/user_info", headers=headers)
|
|
530
|
+
|
|
531
|
+
return result
|
|
532
|
+
|
|
533
|
+
# 判断是否需要代理资源
|
|
534
|
+
if app_config.get("ICP_RESOURCE_PROXY"):
|
|
535
|
+
app.register_blueprint(routes)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/export_data/data_download_handler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/model/resource_param_template.py
RENAMED
|
File without changes
|
|
File without changes
|
{lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/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
|
|
File without changes
|
|
File without changes
|
{lesscode-flask-0.1.53 → lesscode_flask-0.1.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.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/swagger/swagger_template.py
RENAMED
|
File without changes
|
{lesscode-flask-0.1.53 → lesscode_flask-0.1.56}/lesscode_flask/utils/swagger/swagger_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode-flask-0.1.53 → lesscode_flask-0.1.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
|