lesscode-flask 0.0.31__tar.gz → 0.0.33__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.31 → lesscode_flask-0.0.33}/PKG-INFO +10 -18
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/__init__.py +1 -1
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/app.py +83 -47
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/db/datasource.py +4 -4
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask.egg-info/PKG-INFO +10 -18
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask.egg-info/requires.txt +9 -17
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/redash/query_runner/__init__.py +7 -7
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/redash/query_runner/kingbase.py +3 -2
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/redash/query_runner/mysql.py +4 -3
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/redash/query_runner/pg.py +3 -2
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/redash/settings/__init__.py +1 -1
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/redash/utils/requests_session.py +5 -5
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/README.md +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/db/__init__.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/db/executor.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/log/access_log_handler.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/model/access_log.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/model/auth_client.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/model/auth_permission.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/model/base_model.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/model/parameterized_query.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/model/response_result.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/model/user.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/service/access_log_service.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/service/auth_client_service.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/service/auth_permission_service.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/service/authentication_service.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/service/base_service.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/setting/__init__.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/setup/__init__.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/__init__.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/decorator/__init__.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/decorator/cache.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/decorator/swagger.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/file/file_exporter.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/helpers.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/json/NotSortJSONProvider.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/oss/__init__.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/oss/ks3_oss.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/redis/redis_helper.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/request/request.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/swagger/swagger_template.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/swagger/swagger_util.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/wsgi.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask.egg-info/SOURCES.txt +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask.egg-info/dependency_links.txt +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask.egg-info/top_level.txt +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/redash/query_runner/clickhouse.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/redash/query_runner/elasticsearch.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/redash/settings/helpers.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/redash/utils/__init__.py +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/setup.cfg +0 -0
- {lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: lesscode-flask
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.33
|
|
4
4
|
Summary: lesscode-flask 是基于flask的web开发脚手架项目,该项目初衷为简化开发过程,让研发人员更加关注业务。
|
|
5
5
|
Home-page: https://lesscode-flask
|
|
6
6
|
Author: Chao.yy
|
|
@@ -10,27 +10,19 @@ Classifier: Programming Language :: Python :: 3
|
|
|
10
10
|
Classifier: Operating System :: OS Independent
|
|
11
11
|
Requires-Python: >=3.9
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
|
-
Requires-Dist: blinker==1.6.2
|
|
14
13
|
Requires-Dist: Flask==3.0.3
|
|
15
|
-
Requires-Dist:
|
|
16
|
-
Requires-Dist:
|
|
17
|
-
Requires-Dist:
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist:
|
|
20
|
-
Requires-Dist: gunicorn==23.0.0
|
|
14
|
+
Requires-Dist: lesscode-utils==0.0.61
|
|
15
|
+
Requires-Dist: Flask-Login==0.6.3
|
|
16
|
+
Requires-Dist: redis==5.1.1
|
|
17
|
+
Requires-Dist: flask-swagger-ui==4.11.1
|
|
18
|
+
Requires-Dist: pystache==0.6.5
|
|
21
19
|
Requires-Dist: python-dateutil==2.9.0.post0
|
|
22
|
-
Requires-Dist:
|
|
20
|
+
Requires-Dist: funcy==2.0
|
|
23
21
|
Requires-Dist: Flask-SQLAlchemy==3.1.1
|
|
24
|
-
Requires-Dist:
|
|
22
|
+
Requires-Dist: sqlparse==0.5.1
|
|
25
23
|
Requires-Dist: requests==2.32.3
|
|
26
|
-
Requires-Dist:
|
|
27
|
-
Requires-Dist:
|
|
28
|
-
Requires-Dist: sshtunnel==0.4.0
|
|
29
|
-
Requires-Dist: funcy==2.0
|
|
30
|
-
Requires-Dist: pystache==0.6.5
|
|
31
|
-
Requires-Dist: flask-swagger-ui==4.11.1
|
|
32
|
-
Requires-Dist: lesscode-utils==0.0.61
|
|
33
|
-
Requires-Dist: Flask-Login==0.6.3
|
|
24
|
+
Requires-Dist: gunicorn==23.0.0
|
|
25
|
+
Requires-Dist: gevent==24.10.2
|
|
34
26
|
|
|
35
27
|
# lesscode-flask
|
|
36
28
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import json
|
|
2
4
|
import logging
|
|
3
5
|
import os
|
|
4
6
|
import time
|
|
5
7
|
import traceback
|
|
6
8
|
|
|
7
|
-
from flask import Flask, typing as ft
|
|
9
|
+
from flask import Flask, typing as ft, abort, Response
|
|
8
10
|
import typing as t
|
|
9
11
|
from flask.globals import request_ctx, request
|
|
10
12
|
from flask_login import current_user
|
|
@@ -17,6 +19,9 @@ from lesscode_flask.utils.json.NotSortJSONProvider import NotSortJSONProvider
|
|
|
17
19
|
from lesscode_flask.utils.redis.redis_helper import RedisHelper
|
|
18
20
|
|
|
19
21
|
|
|
22
|
+
# import collections.abc as cabc
|
|
23
|
+
|
|
24
|
+
|
|
20
25
|
class Lesscoder(Flask):
|
|
21
26
|
"""A custom Flask app for lesscode-flask"""
|
|
22
27
|
|
|
@@ -39,13 +44,50 @@ class Lesscoder(Flask):
|
|
|
39
44
|
"profile") else "setting.config.Config"
|
|
40
45
|
self.config.from_object(setting_name)
|
|
41
46
|
self.register_error_handler(Exception, self.handle_exception)
|
|
42
|
-
|
|
43
|
-
|
|
47
|
+
|
|
48
|
+
def preprocess_request(self) -> ft.ResponseReturnValue | None:
|
|
49
|
+
if self.config.get("AUTHORIZATION_ENABLE"): # 启动 AUTHORIZATION_ENABLE 才进行权限验证
|
|
50
|
+
# 获取当前请求的url
|
|
51
|
+
url = request.path
|
|
52
|
+
# 获取URL 对应的id 与访问权限
|
|
53
|
+
id, access = RedisHelper(app_config.get("REDIS_OAUTH_KEY", "redis")).sync_hmget(f"upms:url_info:{url}",
|
|
54
|
+
["id", "access"])
|
|
55
|
+
if not id:
|
|
56
|
+
# 如果没有进行注册的url 默认需要登录权限
|
|
57
|
+
access = app_config.get("AUTH_DEFAULT_ACCESS", "0")
|
|
58
|
+
# '访问权限2:需要权限 1:需要登录 0:游客',
|
|
59
|
+
if str(access) == "1": # 需要登录
|
|
60
|
+
if current_user.is_anonymous_user:
|
|
61
|
+
# abort(403, "需要登录")
|
|
62
|
+
ResponseResult.fail("请登录后访问", status_code="403")
|
|
63
|
+
elif str(access) == "2": # 需要权限
|
|
64
|
+
if current_user.is_anonymous_user:
|
|
65
|
+
ResponseResult.fail("请登录后访问", status_code="403")
|
|
66
|
+
if not current_user.has_permission(id):
|
|
67
|
+
ResponseResult.fail("请获取授权后访问", status_code="403")
|
|
68
|
+
return super(Lesscoder, self).preprocess_request()
|
|
69
|
+
|
|
70
|
+
def full_dispatch_request(self) -> Response:
|
|
71
|
+
logging.info("full_dispatch_request")
|
|
72
|
+
# 生成请求标识
|
|
73
|
+
request_id = request.headers.get('Request-Id')
|
|
74
|
+
if request_id is None:
|
|
75
|
+
request_id = generate_uuid()
|
|
76
|
+
# 设置请求标识
|
|
77
|
+
request.request_id = request_id
|
|
78
|
+
start_time = time.time()
|
|
79
|
+
response = super(Lesscoder, self).full_dispatch_request()
|
|
80
|
+
# 为响应设置请求标识
|
|
81
|
+
response.headers['Request-Id'] = request_id
|
|
82
|
+
# 计算请求耗时
|
|
83
|
+
duration = time.time() - start_time
|
|
84
|
+
# 100 为自定义 'ACCESS' 的日志级别标识
|
|
85
|
+
logging.log(100, duration, {"request_id": request_id, "duration": duration})
|
|
86
|
+
return response
|
|
44
87
|
|
|
45
88
|
def dispatch_request(self) -> ft.ResponseReturnValue:
|
|
46
89
|
""" 实现参数自动注入功能,对父级代码进行重写
|
|
47
90
|
"""
|
|
48
|
-
|
|
49
91
|
# 此处开始 均为原代码直接拷贝
|
|
50
92
|
req = request_ctx.request
|
|
51
93
|
if req.routing_exception is not None:
|
|
@@ -102,10 +144,6 @@ class Lesscoder(Flask):
|
|
|
102
144
|
return ResponseResult.make_response(message=str(e), data=str(e), http_code=500, status_code="500")
|
|
103
145
|
|
|
104
146
|
|
|
105
|
-
# 请求开始时间的集合
|
|
106
|
-
request_start_time = {}
|
|
107
|
-
|
|
108
|
-
|
|
109
147
|
def create_app():
|
|
110
148
|
app = Lesscoder()
|
|
111
149
|
app.json = NotSortJSONProvider(app) # 设置自定义的 JSON provider
|
|
@@ -113,45 +151,43 @@ def create_app():
|
|
|
113
151
|
app.setup()
|
|
114
152
|
|
|
115
153
|
@app.before_request
|
|
116
|
-
def
|
|
117
|
-
|
|
118
|
-
request_id = request.headers.get('Request-Id')
|
|
119
|
-
if request_id is None:
|
|
120
|
-
request_id = generate_uuid()
|
|
121
|
-
request.request_id = request_id
|
|
122
|
-
# 记录请求开始时间
|
|
123
|
-
request_start_time[request_id] = time.time()
|
|
124
|
-
if app.config.get("AUTHORIZATION_ENABLE"): # 启动 AUTHORIZATION_ENABLE 才进行权限验证
|
|
125
|
-
# 获取当前请求的url
|
|
126
|
-
url = request.path
|
|
127
|
-
# 获取URL 对应的id 与访问权限
|
|
128
|
-
id, access = RedisHelper(app_config.get("REDIS_OAUTH_KEY", "redis")).sync_hmget(f"upms:url_info:{url}",
|
|
129
|
-
["id", "access"])
|
|
130
|
-
if not id:
|
|
131
|
-
# 如果没有进行注册的url 默认需要登录权限
|
|
132
|
-
access = app_config.get("AUTH_DEFAULT_ACCESS", "0")
|
|
133
|
-
# '访问权限2:需要权限 1:需要登录 0:游客',
|
|
134
|
-
if str(access) == "1": # 需要登录
|
|
135
|
-
if current_user.is_anonymous_user:
|
|
136
|
-
# abort(403, "需要登录")
|
|
137
|
-
ResponseResult.fail("请登录后访问", status_code="403")
|
|
138
|
-
elif str(access) == "2": # 需要权限
|
|
139
|
-
if current_user.is_anonymous_user:
|
|
140
|
-
ResponseResult.fail("请登录后访问", status_code="403")
|
|
141
|
-
if not current_user.has_permission(id):
|
|
142
|
-
ResponseResult.fail("请获取授权后访问", status_code="403")
|
|
154
|
+
def before_request1():
|
|
155
|
+
abort(403, "请求被拦截")
|
|
143
156
|
|
|
144
|
-
@app.
|
|
145
|
-
def
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
157
|
+
# @app.before_request
|
|
158
|
+
# def before_request():
|
|
159
|
+
# logging.info("before_request")
|
|
160
|
+
# if app.config.get("AUTHORIZATION_ENABLE"): # 启动 AUTHORIZATION_ENABLE 才进行权限验证
|
|
161
|
+
# # 获取当前请求的url
|
|
162
|
+
# url = request.path
|
|
163
|
+
# # 获取URL 对应的id 与访问权限
|
|
164
|
+
# id, access = RedisHelper(app_config.get("REDIS_OAUTH_KEY", "redis")).sync_hmget(f"upms:url_info:{url}",
|
|
165
|
+
# ["id", "access"])
|
|
166
|
+
# if not id:
|
|
167
|
+
# # 如果没有进行注册的url 默认需要登录权限
|
|
168
|
+
# access = app_config.get("AUTH_DEFAULT_ACCESS", "0")
|
|
169
|
+
# # '访问权限2:需要权限 1:需要登录 0:游客',
|
|
170
|
+
# if str(access) == "1": # 需要登录
|
|
171
|
+
# if current_user.is_anonymous_user:
|
|
172
|
+
# # abort(403, "需要登录")
|
|
173
|
+
# ResponseResult.fail("请登录后访问", status_code="403")
|
|
174
|
+
# elif str(access) == "2": # 需要权限
|
|
175
|
+
# if current_user.is_anonymous_user:
|
|
176
|
+
# ResponseResult.fail("请登录后访问", status_code="403")
|
|
177
|
+
# if not current_user.has_permission(id):
|
|
178
|
+
# ResponseResult.fail("请获取授权后访问", status_code="403")
|
|
179
|
+
|
|
180
|
+
# @app.after_request
|
|
181
|
+
# def after_request(response):
|
|
182
|
+
# # 每个请求后执行
|
|
183
|
+
# request_id = request.request_id
|
|
184
|
+
# response.headers['Request-Id'] = request.request_id
|
|
185
|
+
# # 计算请求耗时
|
|
186
|
+
# start_time = request.start_time
|
|
187
|
+
# if start_time:
|
|
188
|
+
# duration = time.time() - start_time
|
|
189
|
+
# # 100 为自定义 'ACCESS' 的日志级别标识
|
|
190
|
+
# logging.log(100, duration, {"request_id": request_id, "duration": duration})
|
|
191
|
+
# return response
|
|
156
192
|
|
|
157
193
|
return app
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from redash.query_runner import get_query_runner
|
|
1
|
+
from redash.query_runner import get_query_runner
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
class DataSource():
|
|
@@ -20,8 +20,8 @@ class DataSource():
|
|
|
20
20
|
@property
|
|
21
21
|
def query_runner(self):
|
|
22
22
|
query_runner = get_query_runner(self.options.get("type"), self.options)
|
|
23
|
-
uses_ssh_tunnel = self.options.get("ssh_tunnel", False)
|
|
24
|
-
if uses_ssh_tunnel:
|
|
25
|
-
|
|
23
|
+
# uses_ssh_tunnel = self.options.get("ssh_tunnel", False)
|
|
24
|
+
# if uses_ssh_tunnel:
|
|
25
|
+
# query_runner = with_ssh_tunnel(query_runner, self.options.get("ssh_tunnel"))
|
|
26
26
|
|
|
27
27
|
return query_runner
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: lesscode-flask
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.33
|
|
4
4
|
Summary: lesscode-flask 是基于flask的web开发脚手架项目,该项目初衷为简化开发过程,让研发人员更加关注业务。
|
|
5
5
|
Home-page: https://lesscode-flask
|
|
6
6
|
Author: Chao.yy
|
|
@@ -10,27 +10,19 @@ Classifier: Programming Language :: Python :: 3
|
|
|
10
10
|
Classifier: Operating System :: OS Independent
|
|
11
11
|
Requires-Python: >=3.9
|
|
12
12
|
Description-Content-Type: text/markdown
|
|
13
|
-
Requires-Dist: blinker==1.6.2
|
|
14
13
|
Requires-Dist: Flask==3.0.3
|
|
15
|
-
Requires-Dist:
|
|
16
|
-
Requires-Dist:
|
|
17
|
-
Requires-Dist:
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist:
|
|
20
|
-
Requires-Dist: gunicorn==23.0.0
|
|
14
|
+
Requires-Dist: lesscode-utils==0.0.61
|
|
15
|
+
Requires-Dist: Flask-Login==0.6.3
|
|
16
|
+
Requires-Dist: redis==5.1.1
|
|
17
|
+
Requires-Dist: flask-swagger-ui==4.11.1
|
|
18
|
+
Requires-Dist: pystache==0.6.5
|
|
21
19
|
Requires-Dist: python-dateutil==2.9.0.post0
|
|
22
|
-
Requires-Dist:
|
|
20
|
+
Requires-Dist: funcy==2.0
|
|
23
21
|
Requires-Dist: Flask-SQLAlchemy==3.1.1
|
|
24
|
-
Requires-Dist:
|
|
22
|
+
Requires-Dist: sqlparse==0.5.1
|
|
25
23
|
Requires-Dist: requests==2.32.3
|
|
26
|
-
Requires-Dist:
|
|
27
|
-
Requires-Dist:
|
|
28
|
-
Requires-Dist: sshtunnel==0.4.0
|
|
29
|
-
Requires-Dist: funcy==2.0
|
|
30
|
-
Requires-Dist: pystache==0.6.5
|
|
31
|
-
Requires-Dist: flask-swagger-ui==4.11.1
|
|
32
|
-
Requires-Dist: lesscode-utils==0.0.61
|
|
33
|
-
Requires-Dist: Flask-Login==0.6.3
|
|
24
|
+
Requires-Dist: gunicorn==23.0.0
|
|
25
|
+
Requires-Dist: gevent==24.10.2
|
|
34
26
|
|
|
35
27
|
# lesscode-flask
|
|
36
28
|
|
|
@@ -1,21 +1,13 @@
|
|
|
1
|
-
blinker==1.6.2
|
|
2
1
|
Flask==3.0.3
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
gunicorn==23.0.0
|
|
2
|
+
lesscode-utils==0.0.61
|
|
3
|
+
Flask-Login==0.6.3
|
|
4
|
+
redis==5.1.1
|
|
5
|
+
flask-swagger-ui==4.11.1
|
|
6
|
+
pystache==0.6.5
|
|
9
7
|
python-dateutil==2.9.0.post0
|
|
10
|
-
|
|
8
|
+
funcy==2.0
|
|
11
9
|
Flask-SQLAlchemy==3.1.1
|
|
12
|
-
|
|
10
|
+
sqlparse==0.5.1
|
|
13
11
|
requests==2.32.3
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
sshtunnel==0.4.0
|
|
17
|
-
funcy==2.0
|
|
18
|
-
pystache==0.6.5
|
|
19
|
-
flask-swagger-ui==4.11.1
|
|
20
|
-
lesscode-utils==0.0.61
|
|
21
|
-
Flask-Login==0.6.3
|
|
12
|
+
gunicorn==23.0.0
|
|
13
|
+
gevent==24.10.2
|
|
@@ -5,12 +5,12 @@ from functools import wraps
|
|
|
5
5
|
|
|
6
6
|
import sqlparse
|
|
7
7
|
from dateutil import parser
|
|
8
|
-
from rq.timeouts import JobTimeoutException
|
|
9
|
-
from sshtunnel import open_tunnel
|
|
8
|
+
# from rq.timeouts import JobTimeoutException
|
|
9
|
+
# from sshtunnel import open_tunnel
|
|
10
10
|
|
|
11
11
|
from redash import settings, utils
|
|
12
12
|
from redash.utils.requests_session import (
|
|
13
|
-
UnacceptableAddressException,
|
|
13
|
+
# UnacceptableAddressException,
|
|
14
14
|
requests_or_advocate,
|
|
15
15
|
requests_session,
|
|
16
16
|
)
|
|
@@ -21,7 +21,7 @@ __all__ = [
|
|
|
21
21
|
"BaseQueryRunner",
|
|
22
22
|
"BaseHTTPQueryRunner",
|
|
23
23
|
"InterruptException",
|
|
24
|
-
"JobTimeoutException",
|
|
24
|
+
# "JobTimeoutException",
|
|
25
25
|
"BaseSQLQueryRunner",
|
|
26
26
|
"TYPE_DATETIME",
|
|
27
27
|
"TYPE_BOOLEAN",
|
|
@@ -394,9 +394,9 @@ class BaseHTTPQueryRunner(BaseQueryRunner):
|
|
|
394
394
|
logger.exception(exc)
|
|
395
395
|
error = "Failed to execute query. "
|
|
396
396
|
f"Return Code: {response.status_code} Reason: {response.text}"
|
|
397
|
-
except UnacceptableAddressException as exc:
|
|
398
|
-
|
|
399
|
-
|
|
397
|
+
# except UnacceptableAddressException as exc:
|
|
398
|
+
# logger.exception(exc)
|
|
399
|
+
# error = "Can't query private addresses."
|
|
400
400
|
except requests_or_advocate.RequestException as exc:
|
|
401
401
|
# Catch all other requests exceptions and return the error.
|
|
402
402
|
logger.exception(exc)
|
|
@@ -19,7 +19,7 @@ from redash.query_runner import (
|
|
|
19
19
|
TYPE_STRING,
|
|
20
20
|
BaseSQLQueryRunner,
|
|
21
21
|
InterruptException,
|
|
22
|
-
JobTimeoutException,
|
|
22
|
+
# JobTimeoutException,
|
|
23
23
|
register,
|
|
24
24
|
)
|
|
25
25
|
|
|
@@ -216,7 +216,8 @@ class KingBase(BaseSQLQueryRunner):
|
|
|
216
216
|
except pg8000.DatabaseError as e:
|
|
217
217
|
error = str(e)
|
|
218
218
|
data = None
|
|
219
|
-
except (KeyboardInterrupt, InterruptException, JobTimeoutException):
|
|
219
|
+
# except (KeyboardInterrupt, InterruptException, JobTimeoutException):
|
|
220
|
+
except (KeyboardInterrupt, InterruptException):
|
|
220
221
|
connection.cancel()
|
|
221
222
|
raise
|
|
222
223
|
finally:
|
|
@@ -11,7 +11,7 @@ from redash.query_runner import (
|
|
|
11
11
|
TYPE_STRING,
|
|
12
12
|
BaseSQLQueryRunner,
|
|
13
13
|
InterruptException,
|
|
14
|
-
JobTimeoutException,
|
|
14
|
+
# JobTimeoutException,
|
|
15
15
|
register,
|
|
16
16
|
)
|
|
17
17
|
from redash.settings import parse_boolean
|
|
@@ -20,7 +20,7 @@ try:
|
|
|
20
20
|
import pymysql
|
|
21
21
|
enabled = True
|
|
22
22
|
except ImportError:
|
|
23
|
-
logging.error(traceback.format_exc())
|
|
23
|
+
# logging.error(traceback.format_exc())
|
|
24
24
|
logging.error(f"pymysql is not exist,run:pip install pymysql==1.0.1")
|
|
25
25
|
enabled = False
|
|
26
26
|
|
|
@@ -190,7 +190,8 @@ class Mysql(BaseSQLQueryRunner):
|
|
|
190
190
|
# t.start()
|
|
191
191
|
# while not ev.wait(1):
|
|
192
192
|
# pass
|
|
193
|
-
except (KeyboardInterrupt, InterruptException, JobTimeoutException):
|
|
193
|
+
# except (KeyboardInterrupt, InterruptException, JobTimeoutException):
|
|
194
|
+
except (KeyboardInterrupt, InterruptException):
|
|
194
195
|
self._cancel(thread_id)
|
|
195
196
|
# t.join()
|
|
196
197
|
raise
|
|
@@ -22,7 +22,7 @@ from redash.query_runner import (
|
|
|
22
22
|
TYPE_STRING,
|
|
23
23
|
BaseSQLQueryRunner,
|
|
24
24
|
InterruptException,
|
|
25
|
-
JobTimeoutException,
|
|
25
|
+
# JobTimeoutException,
|
|
26
26
|
register,
|
|
27
27
|
)
|
|
28
28
|
|
|
@@ -271,7 +271,8 @@ class PostgreSQL(BaseSQLQueryRunner):
|
|
|
271
271
|
except pg8000.DatabaseError as e:
|
|
272
272
|
error = str(e)
|
|
273
273
|
data = None
|
|
274
|
-
except (KeyboardInterrupt, InterruptException, JobTimeoutException):
|
|
274
|
+
# except (KeyboardInterrupt, InterruptException, JobTimeoutException):
|
|
275
|
+
except (KeyboardInterrupt, InterruptException):
|
|
275
276
|
connection.cancel()
|
|
276
277
|
raise
|
|
277
278
|
finally:
|
|
@@ -23,7 +23,7 @@ default_query_runners = [
|
|
|
23
23
|
# "redash.query_runner.url",
|
|
24
24
|
# "redash.query_runner.influx_db",
|
|
25
25
|
# "redash.query_runner.influx_db_v2",
|
|
26
|
-
|
|
26
|
+
"redash.query_runner.elasticsearch",
|
|
27
27
|
# "redash.query_runner.elasticsearch2",
|
|
28
28
|
# "redash.query_runner.amazon_elasticsearch",
|
|
29
29
|
# "redash.query_runner.trino",
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
from advocate.exceptions import UnacceptableAddressException # noqa: F401
|
|
1
|
+
# from advocate.exceptions import UnacceptableAddressException # noqa: F401
|
|
2
2
|
|
|
3
3
|
from redash import settings
|
|
4
4
|
|
|
5
|
-
if settings.ENFORCE_PRIVATE_ADDRESS_BLOCK:
|
|
6
|
-
|
|
7
|
-
else:
|
|
8
|
-
|
|
5
|
+
# if settings.ENFORCE_PRIVATE_ADDRESS_BLOCK:
|
|
6
|
+
# import advocate as requests_or_advocate
|
|
7
|
+
# else:
|
|
8
|
+
import requests as requests_or_advocate
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class ConfiguredSession(requests_or_advocate.Session):
|
|
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.0.31 → lesscode_flask-0.0.33}/lesscode_flask/service/access_log_service.py
RENAMED
|
File without changes
|
{lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/service/auth_client_service.py
RENAMED
|
File without changes
|
{lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/service/auth_permission_service.py
RENAMED
|
File without changes
|
{lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/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
|
|
File without changes
|
{lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/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.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/swagger/swagger_template.py
RENAMED
|
File without changes
|
{lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/lesscode_flask/utils/swagger/swagger_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.0.31 → lesscode_flask-0.0.33}/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
|