lesscode-flask 0.2.7__tar.gz → 0.2.9__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 (70) hide show
  1. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/PKG-INFO +1 -1
  2. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/__init__.py +1 -1
  3. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/setting/__init__.py +6 -3
  4. lesscode_flask-0.2.9/lesscode_flask/utils/fs_util.py +55 -0
  5. lesscode_flask-0.2.9/lesscode_flask/utils/limit/req/rate_limiter_handler.py +46 -0
  6. lesscode_flask-0.2.9/lesscode_flask/utils/limit/req_count/count_limiter_handler.py +46 -0
  7. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask.egg-info/PKG-INFO +1 -1
  8. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask.egg-info/SOURCES.txt +1 -1
  9. lesscode_flask-0.2.7/lesscode_flask/utils/limit/req/rate_limiter_handler.py +0 -28
  10. lesscode_flask-0.2.7/lesscode_flask/utils/limit/req_count/count_limiter_handler.py +0 -20
  11. lesscode_flask-0.2.7/lesscode_flask/utils/task/__init__.py +0 -0
  12. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/README.md +0 -0
  13. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/app.py +0 -0
  14. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/db/__init__.py +0 -0
  15. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/db/datasource.py +0 -0
  16. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/db/executor.py +0 -0
  17. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/export_data/__init__.py +0 -0
  18. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/export_data/data_download_handler.py +0 -0
  19. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/log/access_log_handler.py +0 -0
  20. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/model/access_log.py +0 -0
  21. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/model/base_model.py +0 -0
  22. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/model/parameterized_query.py +0 -0
  23. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/model/resource_param_template.py +0 -0
  24. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/model/response_result.py +0 -0
  25. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/model/user.py +0 -0
  26. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/service/access_log_service.py +0 -0
  27. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/service/base_service.py +0 -0
  28. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/service/resource_param_template_service.py +0 -0
  29. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/setup/__init__.py +0 -0
  30. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/signals.py +0 -0
  31. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/static/swagger.py +0 -0
  32. {lesscode_flask-0.2.7/lesscode_flask/utils → lesscode_flask-0.2.9/lesscode_flask/utils/decorator}/__init__.py +0 -0
  33. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/decorator/cache.py +0 -0
  34. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/decorator/swagger.py +0 -0
  35. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/dify_utils.py +0 -0
  36. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/file/file_exporter.py +0 -0
  37. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/file/file_utils.py +0 -0
  38. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/helpers.py +0 -0
  39. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/json/NotSortJSONProvider.py +0 -0
  40. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/limit/__init__.py +0 -0
  41. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/limit/limit_util.py +0 -0
  42. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/limit/req/redis_rate_limiter.py +0 -0
  43. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/limit/req_count/redis_count_limiter.py +0 -0
  44. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/oss/__init__.py +0 -0
  45. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/oss/aliyun_oss.py +0 -0
  46. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/oss/ks3_oss.py +0 -0
  47. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/oss/minio_oss.py +0 -0
  48. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/redis/redis_helper.py +0 -0
  49. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/request/request.py +0 -0
  50. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/swagger/swagger_template.py +0 -0
  51. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/swagger/swagger_util.py +0 -0
  52. {lesscode_flask-0.2.7/lesscode_flask/utils/decorator → lesscode_flask-0.2.9/lesscode_flask/utils/task}/__init__.py +0 -0
  53. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/task/task_helper.py +0 -0
  54. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/utils/thread/thread_utils.py +0 -0
  55. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask/wsgi.py +0 -0
  56. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask.egg-info/dependency_links.txt +0 -0
  57. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask.egg-info/requires.txt +0 -0
  58. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/lesscode_flask.egg-info/top_level.txt +0 -0
  59. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/redash/query_runner/__init__.py +0 -0
  60. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/redash/query_runner/clickhouse.py +0 -0
  61. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/redash/query_runner/elasticsearch.py +0 -0
  62. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/redash/query_runner/kingbase.py +0 -0
  63. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/redash/query_runner/mysql.py +0 -0
  64. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/redash/query_runner/pg.py +0 -0
  65. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/redash/settings/__init__.py +0 -0
  66. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/redash/settings/helpers.py +0 -0
  67. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/redash/utils/__init__.py +0 -0
  68. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/redash/utils/requests_session.py +0 -0
  69. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/setup.cfg +0 -0
  70. {lesscode_flask-0.2.7 → lesscode_flask-0.2.9}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lesscode-flask
3
- Version: 0.2.7
3
+ Version: 0.2.9
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.7'
1
+ __version__ = '0.2.9'
2
2
 
3
3
  import functools
4
4
  import logging
@@ -100,13 +100,13 @@ class BaseConfig:
100
100
  RATE_LIMIT_BURST = 0
101
101
 
102
102
  # 是否启用限流计数验证
103
- COUNT_LIMIT_ENABLE: bool = True
103
+ COUNT_LIMIT_ENABLE: bool = False
104
104
  # 触发限流的处理函数
105
105
  COUNT_LIMIT_HANDLER = CountLimitHandler
106
106
  # 窗口期内最大访问量
107
- COUNT_LIMIT_COUNT = 5
107
+ COUNT_LIMIT_COUNT = 500
108
108
  # 窗口期时长 单位秒
109
- COUNT_LIMIT_TIME_WINDOW = 60
109
+ COUNT_LIMIT_TIME_WINDOW = 60*60*12
110
110
  # 白名单
111
111
  LIMIT_WHITE_LIST: list = ["/ike2b/user/WXOA/login", "/ike2b/detail/company/node/get_note",
112
112
  "/ike2b/user/attention/attention_company_status",
@@ -114,6 +114,9 @@ class BaseConfig:
114
114
  "/toolEngine/targetedInvestmentPromotion/get_reach_chain",
115
115
  "/ike2b/user/WXOA/bind", "/ike2b/select/park/park_list",
116
116
  "/ike2b/pool/company/area_distribution/park_company_count_by_special_tag"]
117
+ # 飞书 webhook URL 常量定义 用于向指定的飞书机器人发送消息的 webhook 地址
118
+ LIMIT_FS_WEBHOOK_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/545140ef-8234-4167-9f0c-8ee72abae430"
119
+ #
117
120
  #
118
121
  # # 外网地址
119
122
  # OUTSIDE_SCREEN_IP: str = ""
@@ -0,0 +1,55 @@
1
+ import logging
2
+
3
+ import json
4
+
5
+ import requests
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+ def fs_webhook(webhook_url:str,title:str, content:[str,list]):
10
+ """
11
+ 发送飞书 webhook 消息
12
+
13
+ 参数:
14
+ webhook_url (str): 飞书 webhook 的 URL 地址
15
+ title (str): 消息的标题
16
+ content (str or list): 消息内容,可以是字符串或字符串列表
17
+
18
+ 返回值:
19
+ 无返回值,直接发送 HTTP 请求
20
+ """
21
+ headers = {'Content-Type': 'application/json;charset=utf-8'}
22
+
23
+ # 根据内容类型构建飞书消息格式
24
+ if isinstance(content, list):
25
+ fs_content = []
26
+ for i in content:
27
+ fs_content.append({
28
+ "tag": "text",
29
+ "text": f"{i}\n"
30
+ })
31
+ else:
32
+ fs_content = [{
33
+ "tag": "text",
34
+ "text": f"{content}\n"
35
+ }]
36
+
37
+ # 构造飞书消息的 JSON 结构
38
+ json_text = {
39
+ "msg_type": "post",
40
+ "content": {
41
+ "post": {
42
+ "zh_cn": {
43
+ "title": title,
44
+ "content": [
45
+ fs_content
46
+ ]
47
+ }
48
+ }
49
+ }
50
+ }
51
+
52
+ # 发送 POST 请求并记录响应结果
53
+ result = requests.post(webhook_url, json.dumps(json_text), headers=headers).content
54
+ logger.info(result)
55
+
@@ -0,0 +1,46 @@
1
+ import time
2
+ import logging
3
+
4
+ from flask import current_app, request
5
+
6
+ from lesscode_flask.model.response_result import ResponseResult
7
+ from lesscode_flask.model.user import flask_login
8
+ from lesscode_flask.utils.fs_util import fs_webhook
9
+ from lesscode_flask.utils.redis.redis_helper import RedisHelper
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+
14
+ class RateLimitHandler:
15
+ """
16
+ 限流后的处理函数实现
17
+ """
18
+ def __init__(self, req, delay: float, excess: float):
19
+ """
20
+ 初始化
21
+ :param req:
22
+ :param delay: 延迟时间
23
+ :param excess: 超出数量
24
+ """
25
+ self.req = req
26
+ self.delay = delay
27
+ self.excess = excess
28
+
29
+
30
+ def response_handler(self):
31
+ # 如果配置了飞书 webhook URL,则发送告警通知
32
+ limit_fs_webhook_url = current_app.config.get("LIMIT_FS_WEBHOOK_URL")
33
+ # 如果配置了飞书 webhook URL,则发送告警通知
34
+ if limit_fs_webhook_url:
35
+ content = []
36
+ current_user = flask_login.current_user
37
+ # 收集用户相关信息
38
+ content.append(f"用户名称:{current_user.display_name}")
39
+ phone_no = current_user.phone_no if current_user.phone_no is not None else "-"
40
+ content.append(f"手机号:{phone_no}")
41
+ content.append(f"用户IP:{request.remote_addr}")
42
+ content.append(f"资源地址:{request.url_rule.rule}")
43
+
44
+ # 发送飞书 webhook 告警
45
+ fs_webhook(limit_fs_webhook_url, "触发频率限流告警", content)
46
+ return ResponseResult.fail(status_code="403", http_code="403", message="请求过于频繁,请稍后再试!")
@@ -0,0 +1,46 @@
1
+ import logging
2
+
3
+ from flask import current_app, request
4
+
5
+ from lesscode_flask.model.response_result import ResponseResult
6
+ from lesscode_flask.model.user import flask_login
7
+ from lesscode_flask.utils.fs_util import fs_webhook
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+
12
+ class CountLimitHandler:
13
+ """
14
+ 限流后的处理函数实现
15
+ """
16
+
17
+ def __init__(self, req, remaining):
18
+ self.req = req
19
+ self.remaining = remaining
20
+
21
+
22
+ def response_handler(self):
23
+ """
24
+ 处理请求频率超限的响应
25
+
26
+ 该函数用于当用户请求过于频繁触发限流时,返回相应的错误响应。
27
+ 同时会发送告警信息到飞书 webhook,记录相关用户和请求信息。
28
+
29
+ Returns:
30
+ ResponseResult: 包含403状态码和错误信息的响应结果
31
+ """
32
+ limit_fs_webhook_url = current_app.config.get("LIMIT_FS_WEBHOOK_URL")
33
+ # 如果配置了飞书 webhook URL,则发送告警通知
34
+ if limit_fs_webhook_url:
35
+ content = []
36
+ current_user = flask_login.current_user
37
+ # 收集用户相关信息
38
+ content.append(f"用户名称:{current_user.display_name}")
39
+ phone_no = current_user.phone_no if current_user.phone_no is not None else "-"
40
+ content.append(f"手机号:{phone_no}")
41
+ content.append(f"用户IP:{request.remote_addr}")
42
+ content.append(f"资源地址:{request.url_rule.rule}")
43
+
44
+ # 发送飞书 webhook 告警
45
+ fs_webhook(limit_fs_webhook_url, "触发总量限流告警", content)
46
+ return ResponseResult.fail(status_code="403", http_code="403", message="请求过于频繁,请稍后再试!")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lesscode-flask
3
- Version: 0.2.7
3
+ Version: 0.2.9
4
4
  Summary: lesscode-flask 是基于flask的web开发脚手架项目,该项目初衷为简化开发过程,让研发人员更加关注业务。
5
5
  Home-page: https://lesscode-flask
6
6
  Author: Chao.yy
@@ -27,8 +27,8 @@ lesscode_flask/service/resource_param_template_service.py
27
27
  lesscode_flask/setting/__init__.py
28
28
  lesscode_flask/setup/__init__.py
29
29
  lesscode_flask/static/swagger.py
30
- lesscode_flask/utils/__init__.py
31
30
  lesscode_flask/utils/dify_utils.py
31
+ lesscode_flask/utils/fs_util.py
32
32
  lesscode_flask/utils/helpers.py
33
33
  lesscode_flask/utils/decorator/__init__.py
34
34
  lesscode_flask/utils/decorator/cache.py
@@ -1,28 +0,0 @@
1
- import time
2
- import logging
3
-
4
- from lesscode_flask.model.response_result import ResponseResult
5
- from lesscode_flask.utils.redis.redis_helper import RedisHelper
6
-
7
- logger = logging.getLogger(__name__)
8
-
9
-
10
- class RateLimitHandler:
11
- """
12
- 限流后的处理函数实现
13
- """
14
- def __init__(self, req, delay: float, excess: float):
15
- """
16
- 初始化
17
- :param req:
18
- :param delay: 延迟时间
19
- :param excess: 超出数量
20
- """
21
- self.req = req
22
- self.delay = delay
23
- self.excess = excess
24
-
25
-
26
- def response_handler(self):
27
- message = "请求过于频繁,请稍后再试"
28
- return ResponseResult.fail(status_code="403", http_code="403", message=message)
@@ -1,20 +0,0 @@
1
- import logging
2
-
3
- from lesscode_flask.model.response_result import ResponseResult
4
-
5
- logger = logging.getLogger(__name__)
6
-
7
-
8
- class CountLimitHandler:
9
- """
10
- 限流后的处理函数实现
11
- """
12
-
13
- def __init__(self, req, remaining):
14
- self.req = req
15
- self.remaining = remaining
16
-
17
-
18
- def response_handler(self):
19
- message = "请求过于频繁,请稍后再试!"
20
- return ResponseResult.fail(status_code="403", http_code="403", message=message)
File without changes
File without changes
File without changes