lesscode-flask 0.2.121__tar.gz → 0.2.123__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.2.121 → lesscode_flask-0.2.123}/PKG-INFO +1 -1
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/__init__.py +1 -1
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/export_data/data_download_handler.py +9 -1
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/oss/__init__.py +149 -29
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/oss/aliyun_oss.py +24 -7
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/oss/ks3_oss.py +37 -14
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/oss/minio_oss.py +14 -3
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/oss/rustfs_oss.py +4 -1
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask.egg-info/PKG-INFO +1 -1
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/README.md +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/app.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/db/__init__.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/db/datasource.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/db/executor.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/export_data/__init__.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/log/access_log_handler.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/access_log.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/base_model.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/parameterized_query.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/resource_param_template.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/response_result.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/user.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/user_limit_policy.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/service/access_log_service.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/service/base_service.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/service/resource_param_template_service.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/setting/__init__.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/setup/__init__.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/signals.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/static/swagger.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/__init__.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/decorator/__init__.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/decorator/cache.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/decorator/sql_injection.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/decorator/swagger.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/dify_utils.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/file/file_exporter.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/file/file_utils.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/fs_util.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/helpers.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/json/NotSortJSONProvider.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/__init__.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/consecutive/consecutive_limiter_handler.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/consecutive/redis_consecutive_limiter.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/limit_util.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/req/rate_limiter_handler.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/req/redis_rate_limiter.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/req_count/count_limiter_handler.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/req_count/redis_count_limiter.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/redis/redis_helper.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/request/request.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/sign/__init__.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/sign/body_canonical.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/sign/sign_main.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/sign/signature.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/swagger/swagger_template.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/swagger/swagger_util.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/task/__init__.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/task/task_helper.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/thread/thread_utils.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/wsgi.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask.egg-info/SOURCES.txt +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask.egg-info/dependency_links.txt +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask.egg-info/requires.txt +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask.egg-info/top_level.txt +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/__init__.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/clickhouse.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/dameng.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/elasticsearch.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/kingbase.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/mysql.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/pg.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/settings/__init__.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/settings/helpers.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/utils/__init__.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/utils/requests_session.py +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/setup.cfg +0 -0
- {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/setup.py +0 -0
|
@@ -10,7 +10,7 @@ from openpyxl import Workbook
|
|
|
10
10
|
|
|
11
11
|
from lesscode_flask.utils.file.file_utils import check_or_create_dir
|
|
12
12
|
from lesscode_flask.utils.helpers import app_config
|
|
13
|
-
from lesscode_flask.utils.oss import Ks3Oss
|
|
13
|
+
from lesscode_flask.utils.oss import CommonOss, Ks3Oss
|
|
14
14
|
|
|
15
15
|
download_func_dict = {}
|
|
16
16
|
|
|
@@ -50,8 +50,10 @@ def upload_result_url(data_list: list, file_name: str = None, describe_text: str
|
|
|
50
50
|
file_key = f'data_download/{datetime_file_name}'
|
|
51
51
|
path = check_or_create_dir(f'{current_app.config.get("STATIC_PATH", "")}/{file_key}')
|
|
52
52
|
clear_excel_task()
|
|
53
|
+
# 生成下载地址
|
|
53
54
|
if app_config.get("DATA_DOWNLOAD_WAY", "url") == "url":
|
|
54
55
|
wb.save(path)
|
|
56
|
+
# 这个if是为了保证旧项目可以正常使用
|
|
55
57
|
if app_config.get("DATA_DOWNLOAD_UPLOAD_KS3"):
|
|
56
58
|
ks = Ks3Oss()
|
|
57
59
|
bucket_name = app_config.get("KS3_CONNECT_CONFIG", {}).get("bucket_name")
|
|
@@ -59,8 +61,14 @@ def upload_result_url(data_list: list, file_name: str = None, describe_text: str
|
|
|
59
61
|
policy="public-read",
|
|
60
62
|
filename=path, content_type="filename")
|
|
61
63
|
return url
|
|
64
|
+
# 生成下载地址的建议使用这个,兼容ks3,aliyun,minio,rustfs,file
|
|
65
|
+
elif app_config.get("DATA_DOWNLOAD_UPLOAD_COMMON_ENABLE"):
|
|
66
|
+
oss = CommonOss(config_key=app_config.get("DATA_DOWNLOAD_UPLOAD_COMMON_KEY"), data_type="file_path")
|
|
67
|
+
file_url_list = oss.upload(files=[{"key": file_key, "file_path": path}])
|
|
68
|
+
return file_url_list[0].get("url")
|
|
62
69
|
else:
|
|
63
70
|
return f'{current_app.config.get("OUTSIDE_SCREEN_IP")}/static/{file_key}'
|
|
71
|
+
# 生成文件流
|
|
64
72
|
else:
|
|
65
73
|
output = io.BytesIO()
|
|
66
74
|
wb.save(output)
|
|
@@ -42,11 +42,23 @@ class CommonOss:
|
|
|
42
42
|
── ks3(金山云 KS3)──────────────────────────────────────────
|
|
43
43
|
依赖:pip install ks3sdk==1.5.0
|
|
44
44
|
storage_config 字段:
|
|
45
|
-
access_key_id (str, 必填)
|
|
46
|
-
access_key_secret (str, 必填)
|
|
47
|
-
host (str, 必填)
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
access_key_id (str, 必填) : KS3 Access Key ID
|
|
46
|
+
access_key_secret (str, 必填) : KS3 Access Key Secret
|
|
47
|
+
host (str, 必填) : KS3 服务域名,例如 "ks3-cn-beijing.ksyun.com"
|
|
48
|
+
port (int, 可选) : 端口,默认 80
|
|
49
|
+
provider (str, 可选) : 服务提供商标识,默认 "kss"
|
|
50
|
+
security_token (str, 可选) : 安全令牌(临时凭证场景)
|
|
51
|
+
profile_name (str, 可选) : 配置文件名称
|
|
52
|
+
path (str, 可选) : 服务路径,默认 "/"
|
|
53
|
+
is_secure (bool, 可选) : 是否启用 HTTPS,默认 False
|
|
54
|
+
debug (int, 可选) : 调试级别,默认 0
|
|
55
|
+
calling_format (obj, 可选) : 调用格式对象(如 SubdomainCallingFormat)
|
|
56
|
+
domain_mode (bool, 可选) : 是否使用自定义域名,默认 False
|
|
57
|
+
local_encrypt (bool, 可选) : 是否启用本地加密,默认 False
|
|
58
|
+
local_key_path (str, 可选) : 本地密钥路径,默认空字符串
|
|
59
|
+
timeout (int, 可选) : 超时秒数,默认 10
|
|
60
|
+
ua_addon (str, 可选) : User-Agent 附加信息,默认空字符串
|
|
61
|
+
bucket_name (str, 必填) : 默认操作的桶名
|
|
50
62
|
STORAGE_CONFIG 示例:
|
|
51
63
|
"storage_config": {
|
|
52
64
|
"access_key_id": "your-access-key-id",
|
|
@@ -71,9 +83,12 @@ class CommonOss:
|
|
|
71
83
|
protocol (str, 可选) : URL 协议,默认 "https"
|
|
72
84
|
session (obj, 可选) : oss2 Session 对象
|
|
73
85
|
connect_timeout (int, 可选) : 连接超时秒数
|
|
86
|
+
app_name (str, 可选) : User-Agent 应用名称标识
|
|
74
87
|
proxies (dict, 可选): 代理配置
|
|
75
88
|
cloudbox_id (str, 可选) : 云盒 ID(云盒场景使用)
|
|
76
89
|
is_path_style (bool, 可选): 是否使用 Path-Style 访问,默认 False
|
|
90
|
+
is_cname (bool, 可选): 是否使用自定义域名(CNAME),默认 False
|
|
91
|
+
enable_crc (bool, 可选): 是否启用 CRC 校验,默认 True
|
|
77
92
|
STORAGE_CONFIG 示例:
|
|
78
93
|
"storage_config": {
|
|
79
94
|
"access_key_id": "your-access-key-id",
|
|
@@ -88,11 +103,16 @@ class CommonOss:
|
|
|
88
103
|
── minio(MinIO / 自托管 S3 兼容)──────────────────────────
|
|
89
104
|
依赖:pip install minio
|
|
90
105
|
storage_config 字段:
|
|
91
|
-
service
|
|
92
|
-
access_key
|
|
93
|
-
secret_key
|
|
94
|
-
|
|
95
|
-
|
|
106
|
+
service (str, 必填) : MinIO 服务地址(不含协议),例如 "127.0.0.1:9000"
|
|
107
|
+
access_key (str, 必填) : MinIO Access Key(用户名)
|
|
108
|
+
secret_key (str, 必填) : MinIO Secret Key(密码)
|
|
109
|
+
session_token (str, 可选) : Session Token(临时凭证场景)
|
|
110
|
+
secure (bool, 可选): 是否启用 HTTPS,默认 False
|
|
111
|
+
region (str, 可选) : S3 Region,默认 None
|
|
112
|
+
http_client (obj, 可选) : urllib3.PoolManager 实例
|
|
113
|
+
credentials (obj, 可选) : 自定义凭证提供者
|
|
114
|
+
cert_check (bool, 可选): 是否验证 SSL 证书,默认 True
|
|
115
|
+
bucket_name (str, 必填) : 默认操作的桶名
|
|
96
116
|
STORAGE_CONFIG 示例:
|
|
97
117
|
"storage_config": {
|
|
98
118
|
"service": "127.0.0.1:9000",
|
|
@@ -107,14 +127,16 @@ class CommonOss:
|
|
|
107
127
|
── rustfs(RustFS,S3 兼容协议)─────────────────────────────
|
|
108
128
|
依赖:pip install boto3
|
|
109
129
|
storage_config 字段:
|
|
110
|
-
endpoint
|
|
111
|
-
|
|
112
|
-
access_key
|
|
113
|
-
secret_key
|
|
114
|
-
secure
|
|
115
|
-
|
|
116
|
-
region
|
|
117
|
-
|
|
130
|
+
endpoint (str, 必填) : RustFS 服务地址,可含协议头,
|
|
131
|
+
例如 "http://127.0.0.1:9000" 或 "127.0.0.1:9000"
|
|
132
|
+
access_key (str, 必填) : Access Key ID
|
|
133
|
+
secret_key (str, 必填) : Secret Access Key
|
|
134
|
+
secure (bool, 可选): 为 True 时自动补全 "https://",默认 False(即 "http://");
|
|
135
|
+
若 endpoint 已含协议头则忽略此参数
|
|
136
|
+
region (str, 可选) : S3 Region,默认 "us-east-1"(RustFS 通常不校验)
|
|
137
|
+
aws_session_token (str, 可选) : AWS Session Token(临时凭证场景)
|
|
138
|
+
verify (bool, 可选): 是否验证 SSL 证书,默认 True
|
|
139
|
+
bucket_name (str, 必填) : 默认操作的桶名
|
|
118
140
|
STORAGE_CONFIG 示例:
|
|
119
141
|
"storage_config": {
|
|
120
142
|
"endpoint": "http://127.0.0.1:9000",
|
|
@@ -160,32 +182,80 @@ class CommonOss:
|
|
|
160
182
|
def _save(self, key, io_stream: BytesIO = None, file_path: str = None, bucket_name: str = None):
|
|
161
183
|
file_url_obj = dict()
|
|
162
184
|
if self.storage_type == "ks3":
|
|
185
|
+
storage_config = self.storage_config or dict()
|
|
186
|
+
ks3 = Ks3Oss(
|
|
187
|
+
access_key_id=storage_config.get("access_key_id"),
|
|
188
|
+
access_key_secret=storage_config.get("access_key_secret"),
|
|
189
|
+
host=storage_config.get("host"),
|
|
190
|
+
port=storage_config.get("port", 80),
|
|
191
|
+
provider=storage_config.get("provider", "kss"),
|
|
192
|
+
security_token=storage_config.get("security_token"),
|
|
193
|
+
profile_name=storage_config.get("profile_name"),
|
|
194
|
+
path=storage_config.get("path", "/"),
|
|
195
|
+
is_secure=storage_config.get("is_secure", False),
|
|
196
|
+
debug=storage_config.get("debug", 0),
|
|
197
|
+
calling_format=storage_config.get("calling_format"),
|
|
198
|
+
domain_mode=storage_config.get("domain_mode", False),
|
|
199
|
+
local_encrypt=storage_config.get("local_encrypt", False),
|
|
200
|
+
local_key_path=storage_config.get("local_key_path", ""),
|
|
201
|
+
timeout=storage_config.get("timeout", 10),
|
|
202
|
+
ua_addon=storage_config.get("ua_addon", ""),
|
|
203
|
+
bucket_name=bucket_name or self.bucket_name
|
|
204
|
+
)
|
|
163
205
|
if self.data_type == "stream":
|
|
164
|
-
storage_config = self.storage_config or dict()
|
|
165
|
-
ks3 = Ks3Oss(bucket_name=bucket_name or self.bucket_name, **storage_config)
|
|
166
206
|
url = ks3.save(key=key, string_data=io_stream.getvalue(), content_type="string", policy="public-read",
|
|
167
207
|
bucket_name=bucket_name or self.bucket_name)
|
|
168
208
|
file_url_obj = {"key": key, "url": url}
|
|
169
209
|
elif self.data_type == "file_path":
|
|
170
|
-
storage_config = self.storage_config or dict()
|
|
171
|
-
ks3 = Ks3Oss(bucket_name=bucket_name or self.bucket_name, **storage_config)
|
|
172
210
|
url = ks3.save(key=key, filename=file_path, content_type="filename", policy="public-read")
|
|
173
211
|
file_url_obj = {"key": key, "url": url}
|
|
174
212
|
elif self.storage_type == "aliyun":
|
|
175
213
|
storage_config = self.storage_config or dict()
|
|
176
|
-
aliyun = AliYunOss(
|
|
214
|
+
aliyun = AliYunOss(
|
|
215
|
+
access_key_id=storage_config.get("access_key_id"),
|
|
216
|
+
access_key_secret=storage_config.get("access_key_secret"),
|
|
217
|
+
endpoint=storage_config.get("endpoint"),
|
|
218
|
+
bucket_name=bucket_name or self.bucket_name,
|
|
219
|
+
region=storage_config.get("region"),
|
|
220
|
+
session=storage_config.get("session"),
|
|
221
|
+
connect_timeout=storage_config.get("connect_timeout"),
|
|
222
|
+
app_name=storage_config.get("app_name"),
|
|
223
|
+
proxies=storage_config.get("proxies"),
|
|
224
|
+
cloudbox_id=storage_config.get("cloudbox_id"),
|
|
225
|
+
is_path_style=storage_config.get("is_path_style", False),
|
|
226
|
+
is_cname=storage_config.get("is_cname", False),
|
|
227
|
+
enable_crc=storage_config.get("enable_crc", True)
|
|
228
|
+
)
|
|
177
229
|
url = aliyun.save(key=key, content_type="string", data=io_stream.getvalue(),
|
|
178
230
|
bucket_name=bucket_name or self.bucket_name)
|
|
179
231
|
file_url_obj = {"key": key, "url": url}
|
|
180
232
|
elif self.storage_type == "minio":
|
|
181
233
|
storage_config = self.storage_config or dict()
|
|
182
|
-
minio = MinioOss(
|
|
234
|
+
minio = MinioOss(
|
|
235
|
+
endpoint=storage_config.get("service"),
|
|
236
|
+
access_key=storage_config.get("access_key"),
|
|
237
|
+
secret_key=storage_config.get("secret_key"),
|
|
238
|
+
session_token=storage_config.get("session_token"),
|
|
239
|
+
secure=storage_config.get("secure", False),
|
|
240
|
+
region=storage_config.get("region"),
|
|
241
|
+
http_client=storage_config.get("http_client"),
|
|
242
|
+
credentials=storage_config.get("credentials"),
|
|
243
|
+
cert_check=storage_config.get("cert_check", True)
|
|
244
|
+
)
|
|
183
245
|
url = minio.save(key=key, content_type="string", data=io_stream.getvalue(),
|
|
184
246
|
bucket_name=bucket_name or self.bucket_name)
|
|
185
247
|
file_url_obj = {"key": key, "url": url}
|
|
186
248
|
elif self.storage_type == "rustfs":
|
|
187
249
|
storage_config = self.storage_config or dict()
|
|
188
|
-
rustfs = RustfsOss(
|
|
250
|
+
rustfs = RustfsOss(
|
|
251
|
+
endpoint=storage_config.get("endpoint"),
|
|
252
|
+
access_key=storage_config.get("access_key"),
|
|
253
|
+
secret_key=storage_config.get("secret_key"),
|
|
254
|
+
secure=storage_config.get("secure", False),
|
|
255
|
+
region=storage_config.get("region", "us-east-1"),
|
|
256
|
+
aws_session_token=storage_config.get("aws_session_token"),
|
|
257
|
+
verify=storage_config.get("verify", True)
|
|
258
|
+
)
|
|
189
259
|
url = rustfs.save(key=key, content_type="string", data=io_stream.getvalue(),
|
|
190
260
|
bucket_name=bucket_name or self.bucket_name)
|
|
191
261
|
file_url_obj = {"key": key, "url": url}
|
|
@@ -321,19 +391,69 @@ class CommonOss:
|
|
|
321
391
|
"""
|
|
322
392
|
if self.storage_type == "ks3":
|
|
323
393
|
storage_config = self.storage_config or dict()
|
|
324
|
-
ks3 = Ks3Oss(
|
|
394
|
+
ks3 = Ks3Oss(
|
|
395
|
+
access_key_id=storage_config.get("access_key_id"),
|
|
396
|
+
access_key_secret=storage_config.get("access_key_secret"),
|
|
397
|
+
host=storage_config.get("host"),
|
|
398
|
+
port=storage_config.get("port", 80),
|
|
399
|
+
provider=storage_config.get("provider", "kss"),
|
|
400
|
+
security_token=storage_config.get("security_token"),
|
|
401
|
+
profile_name=storage_config.get("profile_name"),
|
|
402
|
+
path=storage_config.get("path", "/"),
|
|
403
|
+
is_secure=storage_config.get("is_secure", False),
|
|
404
|
+
debug=storage_config.get("debug", 0),
|
|
405
|
+
calling_format=storage_config.get("calling_format"),
|
|
406
|
+
domain_mode=storage_config.get("domain_mode", False),
|
|
407
|
+
local_encrypt=storage_config.get("local_encrypt", False),
|
|
408
|
+
local_key_path=storage_config.get("local_key_path", ""),
|
|
409
|
+
timeout=storage_config.get("timeout", 10),
|
|
410
|
+
ua_addon=storage_config.get("ua_addon", ""),
|
|
411
|
+
bucket_name=self.bucket_name
|
|
412
|
+
)
|
|
325
413
|
return ks3.get_file(key=key, bucket_name=bucket_name or self.bucket_name)
|
|
326
414
|
elif self.storage_type == "aliyun":
|
|
327
415
|
storage_config = self.storage_config or dict()
|
|
328
|
-
aliyun = AliYunOss(
|
|
416
|
+
aliyun = AliYunOss(
|
|
417
|
+
access_key_id=storage_config.get("access_key_id"),
|
|
418
|
+
access_key_secret=storage_config.get("access_key_secret"),
|
|
419
|
+
endpoint=storage_config.get("endpoint"),
|
|
420
|
+
bucket_name=self.bucket_name,
|
|
421
|
+
region=storage_config.get("region"),
|
|
422
|
+
session=storage_config.get("session"),
|
|
423
|
+
connect_timeout=storage_config.get("connect_timeout"),
|
|
424
|
+
app_name=storage_config.get("app_name"),
|
|
425
|
+
proxies=storage_config.get("proxies"),
|
|
426
|
+
cloudbox_id=storage_config.get("cloudbox_id"),
|
|
427
|
+
is_path_style=storage_config.get("is_path_style", False),
|
|
428
|
+
is_cname=storage_config.get("is_cname", False),
|
|
429
|
+
enable_crc=storage_config.get("enable_crc", True)
|
|
430
|
+
)
|
|
329
431
|
return aliyun.get_file(key=key, bucket_name=bucket_name or self.bucket_name)
|
|
330
432
|
elif self.storage_type == "minio":
|
|
331
433
|
storage_config = self.storage_config or dict()
|
|
332
|
-
minio = MinioOss(
|
|
434
|
+
minio = MinioOss(
|
|
435
|
+
endpoint=storage_config.get("service"),
|
|
436
|
+
access_key=storage_config.get("access_key"),
|
|
437
|
+
secret_key=storage_config.get("secret_key"),
|
|
438
|
+
session_token=storage_config.get("session_token"),
|
|
439
|
+
secure=storage_config.get("secure", False),
|
|
440
|
+
region=storage_config.get("region"),
|
|
441
|
+
http_client=storage_config.get("http_client"),
|
|
442
|
+
credentials=storage_config.get("credentials"),
|
|
443
|
+
cert_check=storage_config.get("cert_check", True)
|
|
444
|
+
)
|
|
333
445
|
return minio.get_file(bucket_name=bucket_name or self.bucket_name, key=key)
|
|
334
446
|
elif self.storage_type == "rustfs":
|
|
335
447
|
storage_config = self.storage_config or dict()
|
|
336
|
-
rustfs = RustfsOss(
|
|
448
|
+
rustfs = RustfsOss(
|
|
449
|
+
endpoint=storage_config.get("endpoint"),
|
|
450
|
+
access_key=storage_config.get("access_key"),
|
|
451
|
+
secret_key=storage_config.get("secret_key"),
|
|
452
|
+
secure=storage_config.get("secure", False),
|
|
453
|
+
region=storage_config.get("region", "us-east-1"),
|
|
454
|
+
aws_session_token=storage_config.get("aws_session_token"),
|
|
455
|
+
verify=storage_config.get("verify", True)
|
|
456
|
+
)
|
|
337
457
|
return rustfs.get_file(bucket_name=bucket_name or self.bucket_name, key=key)
|
|
338
458
|
if self.storage_type == "file":
|
|
339
459
|
storage_dir = self.storage_config.get("STORAGE_DIR", "")
|
|
@@ -8,7 +8,8 @@ from lesscode_flask.utils.helpers import app_config
|
|
|
8
8
|
class AliYunOss:
|
|
9
9
|
def __init__(self, **kwargs):
|
|
10
10
|
try:
|
|
11
|
-
oss2 = importlib.import_module("oss2")
|
|
11
|
+
# oss2 = importlib.import_module("oss2")
|
|
12
|
+
import oss2
|
|
12
13
|
except ImportError:
|
|
13
14
|
raise Exception(f"oss2 is not exist,run:pip install oss2")
|
|
14
15
|
bucket_name = kwargs.pop("bucket_name", "") if kwargs.get("bucket_name") else app_config.get(
|
|
@@ -24,12 +25,16 @@ class AliYunOss:
|
|
|
24
25
|
self.endpoint = kwargs.pop("endpoint", "") if kwargs.get("endpoint") else app_config.get(
|
|
25
26
|
"ALIYUN_CONNECT_CONFIG").get(
|
|
26
27
|
"endpoint")
|
|
28
|
+
self.session = kwargs.pop("session", None)
|
|
29
|
+
self.connect_timeout = kwargs.pop("connect_timeout", None)
|
|
30
|
+
self.is_cname = kwargs.pop("is_cname", False)
|
|
31
|
+
self.enable_crc = kwargs.pop("enable_crc", True)
|
|
27
32
|
config = {
|
|
28
33
|
"auth": self.auth,
|
|
29
34
|
"endpoint": self.endpoint,
|
|
30
|
-
"session":
|
|
31
|
-
"connect_timeout":
|
|
32
|
-
"app_name": kwargs.pop("
|
|
35
|
+
"session": self.session,
|
|
36
|
+
"connect_timeout": self.connect_timeout,
|
|
37
|
+
"app_name": kwargs.pop("app_name", ''),
|
|
33
38
|
"proxies": kwargs.pop("proxies", None),
|
|
34
39
|
"region": kwargs.pop("region", None),
|
|
35
40
|
"cloudbox_id": kwargs.pop("cloudbox_id", None),
|
|
@@ -37,7 +42,11 @@ class AliYunOss:
|
|
|
37
42
|
}
|
|
38
43
|
self.client = oss2.Service(**config)
|
|
39
44
|
if bucket_name is not None:
|
|
40
|
-
self.instance = oss2.Bucket(
|
|
45
|
+
self.instance = oss2.Bucket(
|
|
46
|
+
auth=self.auth, endpoint=self.endpoint, bucket_name=bucket_name,
|
|
47
|
+
is_cname=self.is_cname, session=self.session,
|
|
48
|
+
connect_timeout=self.connect_timeout, enable_crc=self.enable_crc
|
|
49
|
+
)
|
|
41
50
|
else:
|
|
42
51
|
self.instance = None
|
|
43
52
|
|
|
@@ -47,7 +56,11 @@ class AliYunOss:
|
|
|
47
56
|
except ImportError:
|
|
48
57
|
raise Exception(f"oss2 is not exist,run:pip install oss2")
|
|
49
58
|
if bucket_name:
|
|
50
|
-
self.instance = oss2.Bucket(
|
|
59
|
+
self.instance = oss2.Bucket(
|
|
60
|
+
auth=self.auth, endpoint=self.endpoint, bucket_name=bucket_name,
|
|
61
|
+
is_cname=self.is_cname, session=self.session,
|
|
62
|
+
connect_timeout=self.connect_timeout, enable_crc=self.enable_crc
|
|
63
|
+
)
|
|
51
64
|
return self.instance
|
|
52
65
|
|
|
53
66
|
def create_bucket(self, bucket_name, **kwargs):
|
|
@@ -128,7 +141,11 @@ class AliYunOss:
|
|
|
128
141
|
except ImportError:
|
|
129
142
|
raise Exception(f"oss2 is not exist,run:pip install oss2")
|
|
130
143
|
if bucket_name:
|
|
131
|
-
self.instance = oss2.Bucket(
|
|
144
|
+
self.instance = oss2.Bucket(
|
|
145
|
+
auth=self.auth, endpoint=self.endpoint, bucket_name=bucket_name,
|
|
146
|
+
is_cname=self.is_cname, session=self.session,
|
|
147
|
+
connect_timeout=self.connect_timeout, enable_crc=self.enable_crc
|
|
148
|
+
)
|
|
132
149
|
return self.instance.put_bucket_referer(models.BucketReferer(**kwargs))
|
|
133
150
|
|
|
134
151
|
def get_bucket_cors(self, bucket_name=None):
|
|
@@ -1,30 +1,53 @@
|
|
|
1
1
|
import importlib
|
|
2
|
-
import os
|
|
3
|
-
|
|
4
2
|
import math
|
|
3
|
+
import os
|
|
5
4
|
|
|
6
5
|
from lesscode_flask.utils.helpers import app_config
|
|
7
6
|
|
|
8
7
|
|
|
9
8
|
class Ks3Oss:
|
|
10
|
-
def __init__(self,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if not
|
|
16
|
-
|
|
17
|
-
if not
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
9
|
+
def __init__(self, access_key_id=None, access_key_secret=None, host=None, port=80,
|
|
10
|
+
provider='kss', security_token=None, profile_name=None, path='/',
|
|
11
|
+
is_secure=False, debug=0, calling_format=None, domain_mode=False,
|
|
12
|
+
local_encrypt=False, local_key_path='', timeout=10, ua_addon='',
|
|
13
|
+
bucket_name=None):
|
|
14
|
+
if not access_key_id:
|
|
15
|
+
access_key_id = app_config.get("KS3_CONNECT_CONFIG").get("access_key_id")
|
|
16
|
+
if not access_key_secret:
|
|
17
|
+
access_key_secret = app_config.get("KS3_CONNECT_CONFIG").get("access_key_secret")
|
|
18
|
+
if not host:
|
|
19
|
+
host = app_config.get("KS3_CONNECT_CONFIG").get("host")
|
|
21
20
|
if bucket_name is None:
|
|
22
21
|
bucket_name = app_config.get("KS3_CONNECT_CONFIG").get("bucket_name")
|
|
23
22
|
try:
|
|
24
23
|
ks3_connection = importlib.import_module("ks3.connection")
|
|
25
24
|
except ImportError:
|
|
26
25
|
raise Exception(f"ks3sdk is not exist,run:pip install ks3sdk==1.5.0")
|
|
27
|
-
|
|
26
|
+
|
|
27
|
+
# 准备构造参数
|
|
28
|
+
conn_kwargs = {
|
|
29
|
+
'host': host,
|
|
30
|
+
'port': port,
|
|
31
|
+
'provider': provider,
|
|
32
|
+
'security_token': security_token,
|
|
33
|
+
'profile_name': profile_name,
|
|
34
|
+
'path': path,
|
|
35
|
+
'is_secure': is_secure,
|
|
36
|
+
'debug': debug,
|
|
37
|
+
'domain_mode': domain_mode,
|
|
38
|
+
'local_encrypt': local_encrypt,
|
|
39
|
+
'local_key_path': local_key_path,
|
|
40
|
+
'timeout': timeout,
|
|
41
|
+
'ua_addon': ua_addon
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
# 如果提供了 calling_format,则添加
|
|
45
|
+
if calling_format is not None:
|
|
46
|
+
conn_kwargs['calling_format'] = calling_format
|
|
47
|
+
|
|
48
|
+
self.client = ks3_connection.Connection(
|
|
49
|
+
access_key_id, access_key_secret, **conn_kwargs
|
|
50
|
+
)
|
|
28
51
|
if bucket_name is not None:
|
|
29
52
|
self.instance = self.client.get_bucket(bucket_name)
|
|
30
53
|
else:
|
|
@@ -15,13 +15,24 @@ class MinioOss:
|
|
|
15
15
|
cls.client = object.__new__(cls)
|
|
16
16
|
return cls.client
|
|
17
17
|
|
|
18
|
-
def __init__(self,
|
|
18
|
+
def __init__(self, endpoint, access_key, secret_key, session_token=None, secure=False,
|
|
19
|
+
region=None, http_client=None, credentials=None, cert_check=True):
|
|
19
20
|
try:
|
|
20
21
|
minio = importlib.import_module("minio")
|
|
21
22
|
except ImportError as e:
|
|
22
23
|
raise Exception(f"minio is not exist,run:pip install minio")
|
|
23
|
-
self.
|
|
24
|
-
self.client = minio.Minio(
|
|
24
|
+
self.endpoint = endpoint
|
|
25
|
+
self.client = minio.Minio(
|
|
26
|
+
endpoint,
|
|
27
|
+
access_key=access_key,
|
|
28
|
+
secret_key=secret_key,
|
|
29
|
+
session_token=session_token,
|
|
30
|
+
secure=secure,
|
|
31
|
+
region=region,
|
|
32
|
+
http_client=http_client,
|
|
33
|
+
credentials=credentials,
|
|
34
|
+
cert_check=cert_check
|
|
35
|
+
)
|
|
25
36
|
|
|
26
37
|
def exists_bucket(self, bucket_name):
|
|
27
38
|
"""
|
|
@@ -10,7 +10,8 @@ class RustfsOss:
|
|
|
10
10
|
RustFS is an S3-compatible object storage written in Rust.
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
-
def __init__(self, endpoint, access_key, secret_key, secure=False, region="us-east-1"
|
|
13
|
+
def __init__(self, endpoint, access_key, secret_key, secure=False, region="us-east-1",
|
|
14
|
+
aws_session_token=None, verify=True):
|
|
14
15
|
try:
|
|
15
16
|
boto3 = importlib.import_module("boto3")
|
|
16
17
|
except ImportError:
|
|
@@ -26,7 +27,9 @@ class RustfsOss:
|
|
|
26
27
|
endpoint_url=endpoint_url,
|
|
27
28
|
aws_access_key_id=access_key,
|
|
28
29
|
aws_secret_access_key=secret_key,
|
|
30
|
+
aws_session_token=aws_session_token,
|
|
29
31
|
region_name=region,
|
|
32
|
+
verify=verify,
|
|
30
33
|
)
|
|
31
34
|
|
|
32
35
|
# ------------------------------------------------------------------
|
|
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.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/parameterized_query.py
RENAMED
|
File without changes
|
{lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/resource_param_template.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/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
|
{lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/decorator/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/decorator/sql_injection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/file/file_exporter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/json/NotSortJSONProvider.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
|
{lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/redis/redis_helper.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/sign/body_canonical.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/swagger/swagger_template.py
RENAMED
|
File without changes
|
{lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/swagger/swagger_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/thread/thread_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/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
|
|
File without changes
|