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.
Files changed (78) hide show
  1. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/PKG-INFO +1 -1
  2. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/__init__.py +1 -1
  3. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/export_data/data_download_handler.py +9 -1
  4. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/oss/__init__.py +149 -29
  5. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/oss/aliyun_oss.py +24 -7
  6. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/oss/ks3_oss.py +37 -14
  7. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/oss/minio_oss.py +14 -3
  8. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/oss/rustfs_oss.py +4 -1
  9. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask.egg-info/PKG-INFO +1 -1
  10. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/README.md +0 -0
  11. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/app.py +0 -0
  12. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/db/__init__.py +0 -0
  13. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/db/datasource.py +0 -0
  14. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/db/executor.py +0 -0
  15. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/export_data/__init__.py +0 -0
  16. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/log/access_log_handler.py +0 -0
  17. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/access_log.py +0 -0
  18. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/base_model.py +0 -0
  19. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/parameterized_query.py +0 -0
  20. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/resource_param_template.py +0 -0
  21. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/response_result.py +0 -0
  22. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/user.py +0 -0
  23. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/model/user_limit_policy.py +0 -0
  24. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/service/access_log_service.py +0 -0
  25. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/service/base_service.py +0 -0
  26. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/service/resource_param_template_service.py +0 -0
  27. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/setting/__init__.py +0 -0
  28. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/setup/__init__.py +0 -0
  29. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/signals.py +0 -0
  30. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/static/swagger.py +0 -0
  31. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/__init__.py +0 -0
  32. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/decorator/__init__.py +0 -0
  33. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/decorator/cache.py +0 -0
  34. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/decorator/sql_injection.py +0 -0
  35. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/decorator/swagger.py +0 -0
  36. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/dify_utils.py +0 -0
  37. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/file/file_exporter.py +0 -0
  38. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/file/file_utils.py +0 -0
  39. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/fs_util.py +0 -0
  40. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/helpers.py +0 -0
  41. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/json/NotSortJSONProvider.py +0 -0
  42. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/__init__.py +0 -0
  43. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/consecutive/consecutive_limiter_handler.py +0 -0
  44. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/consecutive/redis_consecutive_limiter.py +0 -0
  45. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/limit_util.py +0 -0
  46. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/req/rate_limiter_handler.py +0 -0
  47. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/req/redis_rate_limiter.py +0 -0
  48. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/req_count/count_limiter_handler.py +0 -0
  49. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/limit/req_count/redis_count_limiter.py +0 -0
  50. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/redis/redis_helper.py +0 -0
  51. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/request/request.py +0 -0
  52. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/sign/__init__.py +0 -0
  53. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/sign/body_canonical.py +0 -0
  54. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/sign/sign_main.py +0 -0
  55. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/sign/signature.py +0 -0
  56. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/swagger/swagger_template.py +0 -0
  57. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/swagger/swagger_util.py +0 -0
  58. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/task/__init__.py +0 -0
  59. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/task/task_helper.py +0 -0
  60. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/utils/thread/thread_utils.py +0 -0
  61. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask/wsgi.py +0 -0
  62. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask.egg-info/SOURCES.txt +0 -0
  63. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask.egg-info/dependency_links.txt +0 -0
  64. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask.egg-info/requires.txt +0 -0
  65. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/lesscode_flask.egg-info/top_level.txt +0 -0
  66. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/__init__.py +0 -0
  67. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/clickhouse.py +0 -0
  68. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/dameng.py +0 -0
  69. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/elasticsearch.py +0 -0
  70. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/kingbase.py +0 -0
  71. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/mysql.py +0 -0
  72. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/query_runner/pg.py +0 -0
  73. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/settings/__init__.py +0 -0
  74. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/settings/helpers.py +0 -0
  75. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/utils/__init__.py +0 -0
  76. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/redash/utils/requests_session.py +0 -0
  77. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/setup.cfg +0 -0
  78. {lesscode_flask-0.2.121 → lesscode_flask-0.2.123}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lesscode-flask
3
- Version: 0.2.121
3
+ Version: 0.2.123
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.2.121"
1
+ __version__ = "0.2.123"
2
2
 
3
3
  import functools
4
4
  import logging
@@ -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, 必填) : KS3 Access Key ID
46
- access_key_secret (str, 必填) : KS3 Access Key Secret
47
- host (str, 必填) : KS3 服务域名,例如 "ks3-cn-beijing.ksyun.com"
48
- is_secure (bool, 可选): 是否启用 HTTPS,默认 False
49
- bucket_name (str, 必填) : 默认操作的桶名
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 (str, 必填) : MinIO 服务地址(不含协议),例如 "127.0.0.1:9000"
92
- access_key (str, 必填) : MinIO Access Key(用户名)
93
- secret_key (str, 必填) : MinIO Secret Key(密码)
94
- secure (bool, 可选): 是否启用 HTTPS,默认 False
95
- bucket_name (str, 必填) : 默认操作的桶名
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 (str, 必填) : RustFS 服务地址,可含协议头,
111
- 例如 "http://127.0.0.1:9000" 或 "127.0.0.1:9000"
112
- access_key (str, 必填) : Access Key ID
113
- secret_key (str, 必填) : Secret Access Key
114
- secure (bool, 可选): 为 True 时自动补全 "https://",默认 False(即 "http://");
115
- 若 endpoint 已含协议头则忽略此参数
116
- region (str, 可选) : S3 Region,默认 "us-east-1"(RustFS 通常不校验)
117
- bucket_name (str, 必填) : 默认操作的桶名
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(bucket_name=bucket_name or self.bucket_name, **storage_config)
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(**storage_config)
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(**storage_config)
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(bucket_name=self.bucket_name, **storage_config)
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(bucket_name=self.bucket_name, **storage_config)
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(**storage_config)
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(**storage_config)
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": kwargs.pop("session", None),
31
- "connect_timeout": kwargs.pop("connect_timeout", None),
32
- "app_name": kwargs.pop("connect_timeout", ''),
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(auth=self.auth, endpoint=self.endpoint, bucket_name=bucket_name)
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(auth=self.auth, endpoint=self.endpoint, bucket_name=bucket_name)
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(auth=self.auth, endpoint=self.endpoint, bucket_name=bucket_name)
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, **kwargs):
11
- if not kwargs.get("access_key_id"):
12
- kwargs.update({"access_key_id": app_config.get("KS3_CONNECT_CONFIG").get("access_key_id")})
13
- if not kwargs.get("access_key_secret"):
14
- kwargs.update({"access_key_secret": app_config.get("KS3_CONNECT_CONFIG").get("access_key_secret")})
15
- if not kwargs.get("host"):
16
- kwargs.update({"host": app_config.get("KS3_CONNECT_CONFIG").get("host")})
17
- if not kwargs.get("is_secure"):
18
- if app_config.get("KS3_CONNECT_CONFIG").get("is_secure"):
19
- kwargs.update({"is_secure": app_config.get("KS3_CONNECT_CONFIG").get("is_secure")})
20
- bucket_name = kwargs.pop("bucket_name", None)
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
- self.client = ks3_connection.Connection(**kwargs)
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, service, access_key, secret_key, secure=False):
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.service = service
24
- self.client = minio.Minio(service, access_key=access_key, secret_key=secret_key, secure=secure)
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
  # ------------------------------------------------------------------
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lesscode-flask
3
- Version: 0.2.121
3
+ Version: 0.2.123
4
4
  Summary: lesscode-flask 是基于flask的web开发脚手架项目,该项目初衷为简化开发过程,让研发人员更加关注业务。
5
5
  Home-page: https://lesscode-flask
6
6
  Author: Chao.yy