pixelarraylib 1.0.0__tar.gz → 1.0.2__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.
- {pixelarraylib-1.0.0 → pixelarraylib-1.0.2}/MANIFEST.in +1 -1
- {pixelarraylib-1.0.0/pixelarraylib.egg-info → pixelarraylib-1.0.2}/PKG-INFO +9 -9
- {pixelarraylib-1.0.0 → pixelarraylib-1.0.2}/README.md +7 -7
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/__init__.py +5 -5
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/__main__.py +21 -21
- pixelarraylib-1.0.2/pixelarraylib/aliyun/acr.py +217 -0
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/aliyun/aliyun_email.py +1 -1
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/aliyun/billing.py +1 -1
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/aliyun/content_scanner.py +1 -1
- pixelarraylib-1.0.2/pixelarraylib/aliyun/eci.py +165 -0
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/aliyun/fc.py +2 -2
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/aliyun/oss.py +2 -2
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/aliyun/sms.py +1 -1
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/aliyun/sts.py +2 -2
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/db_utils/mysql.py +1 -1
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/db_utils/redis.py +1 -1
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/decorators/__init__.py +1 -1
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/decorators/decorators.py +1 -1
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/monitor/feishu.py +1 -0
- pixelarraylib-1.0.2/pixelarraylib/scripts/__init__.py +22 -0
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/scripts/collect_code_to_txt.py +4 -4
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/scripts/create_test_case_files.py +2 -2
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/scripts/nginx_proxy_to_ecs.py +2 -2
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/scripts/remove_empty_lines.py +5 -5
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/scripts/summary_code_count.py +5 -5
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/system/common.py +1 -1
- {pixelarraylib-1.0.0 → pixelarraylib-1.0.2/pixelarraylib.egg-info}/PKG-INFO +9 -9
- pixelarraylib-1.0.2/pixelarraylib.egg-info/SOURCES.txt +43 -0
- pixelarraylib-1.0.2/pixelarraylib.egg-info/entry_points.txt +2 -0
- {pixelarraylib-1.0.0 → pixelarraylib-1.0.2}/pixelarraylib.egg-info/requires.txt +1 -1
- pixelarraylib-1.0.2/pixelarraylib.egg-info/top_level.txt +1 -0
- {pixelarraylib-1.0.0 → pixelarraylib-1.0.2}/pyproject.toml +6 -6
- {pixelarraylib-1.0.0 → pixelarraylib-1.0.2}/requirements.txt +1 -1
- pixelarraylib-1.0.0/arraylib/aliyun/eci.py +0 -47
- pixelarraylib-1.0.0/arraylib/scripts/__init__.py +0 -22
- pixelarraylib-1.0.0/pixelarraylib.egg-info/SOURCES.txt +0 -42
- pixelarraylib-1.0.0/pixelarraylib.egg-info/entry_points.txt +0 -2
- pixelarraylib-1.0.0/pixelarraylib.egg-info/top_level.txt +0 -1
- {pixelarraylib-1.0.0 → pixelarraylib-1.0.2}/LICENSE +0 -0
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/aliyun/__init__.py +0 -0
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/aliyun/domain.py +0 -0
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/aliyun/ecs.py +0 -0
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/gitlab/__init__.py +0 -0
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/gitlab/code_analyzer.py +0 -0
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/gitlab/pypi_package_manager.py +0 -0
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/monitor/__init__.py +0 -0
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/net/request.py +0 -0
- {pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/system/__init__.py +0 -0
- {pixelarraylib-1.0.0 → pixelarraylib-1.0.2}/pixelarraylib.egg-info/dependency_links.txt +0 -0
- {pixelarraylib-1.0.0 → pixelarraylib-1.0.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pixelarraylib
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2
|
|
4
4
|
Summary: PixelArray Python开发工具库 - 包含阿里云服务、数据库工具、装饰器、监控等功能
|
|
5
5
|
Author-email: Lu qi <qi.lu@pixelarrayai.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -32,11 +32,11 @@ Requires-Dist: alibabacloud_sts20150401
|
|
|
32
32
|
Requires-Dist: alibabacloud_alidns20150109
|
|
33
33
|
Requires-Dist: alibabacloud_eci20180808
|
|
34
34
|
Requires-Dist: alibabacloud_bssopenapi20171214
|
|
35
|
+
Requires-Dist: alibabacloud_cr20181201
|
|
35
36
|
Requires-Dist: oss2
|
|
36
37
|
Requires-Dist: pymysql
|
|
37
38
|
Requires-Dist: aiomysql
|
|
38
39
|
Requires-Dist: redis
|
|
39
|
-
Requires-Dist: redis[async]
|
|
40
40
|
Requires-Dist: requests
|
|
41
41
|
Requires-Dist: aiohttp
|
|
42
42
|
Requires-Dist: asyncio
|
|
@@ -63,12 +63,12 @@ pip install pixelarraylib
|
|
|
63
63
|
|
|
64
64
|
```python
|
|
65
65
|
# 导入pixelarraylib模块
|
|
66
|
-
import
|
|
66
|
+
import pixelarraylib
|
|
67
67
|
|
|
68
68
|
# 使用各种功能模块
|
|
69
|
-
from
|
|
70
|
-
from
|
|
71
|
-
from
|
|
69
|
+
from pixelarraylib.aliyun import some_service
|
|
70
|
+
from pixelarraylib.db_utils import database_tools
|
|
71
|
+
from pixelarraylib.decorators import useful_decorators
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
### 2. 命令行工具使用
|
|
@@ -128,9 +128,9 @@ pixelarraylib --help
|
|
|
128
128
|
|
|
129
129
|
### 添加新的命令行工具
|
|
130
130
|
|
|
131
|
-
1. 在 `
|
|
132
|
-
2. 在 `
|
|
133
|
-
3. 更新 `
|
|
131
|
+
1. 在 `pixelarraylib/scripts/` 目录下创建新的脚本文件
|
|
132
|
+
2. 在 `pixelarraylib/__main__.py` 中添加新的命令选项
|
|
133
|
+
3. 更新 `pixelarraylib/scripts/__init__.py` 导出新功能
|
|
134
134
|
|
|
135
135
|
## 许可证
|
|
136
136
|
|
|
@@ -14,12 +14,12 @@ pip install pixelarraylib
|
|
|
14
14
|
|
|
15
15
|
```python
|
|
16
16
|
# 导入pixelarraylib模块
|
|
17
|
-
import
|
|
17
|
+
import pixelarraylib
|
|
18
18
|
|
|
19
19
|
# 使用各种功能模块
|
|
20
|
-
from
|
|
21
|
-
from
|
|
22
|
-
from
|
|
20
|
+
from pixelarraylib.aliyun import some_service
|
|
21
|
+
from pixelarraylib.db_utils import database_tools
|
|
22
|
+
from pixelarraylib.decorators import useful_decorators
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
### 2. 命令行工具使用
|
|
@@ -79,9 +79,9 @@ pixelarraylib --help
|
|
|
79
79
|
|
|
80
80
|
### 添加新的命令行工具
|
|
81
81
|
|
|
82
|
-
1. 在 `
|
|
83
|
-
2. 在 `
|
|
84
|
-
3. 更新 `
|
|
82
|
+
1. 在 `pixelarraylib/scripts/` 目录下创建新的脚本文件
|
|
83
|
+
2. 在 `pixelarraylib/__main__.py` 中添加新的命令选项
|
|
84
|
+
3. 更新 `pixelarraylib/scripts/__init__.py` 导出新功能
|
|
85
85
|
|
|
86
86
|
## 许可证
|
|
87
87
|
|
|
@@ -14,13 +14,13 @@ PixelArray Python开发工具库
|
|
|
14
14
|
- system: 系统工具
|
|
15
15
|
|
|
16
16
|
使用示例:
|
|
17
|
-
from
|
|
18
|
-
from
|
|
19
|
-
from
|
|
20
|
-
from
|
|
17
|
+
from pixelarraylib.aliyun import oss
|
|
18
|
+
from pixelarraylib.db_utils import mysql
|
|
19
|
+
from pixelarraylib.decorators import decorators
|
|
20
|
+
from pixelarraylib.gitlab import pypi_package_manager
|
|
21
21
|
"""
|
|
22
22
|
|
|
23
|
-
__version__ = "1.0.
|
|
23
|
+
__version__ = "1.0.2"
|
|
24
24
|
__author__ = "PixelArray"
|
|
25
25
|
__email__ = "qi.lu@pixelarrayai.com"
|
|
26
26
|
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
"""
|
|
3
3
|
ArrayLib 命令行工具入口点
|
|
4
4
|
支持的命令:
|
|
5
|
-
-
|
|
6
|
-
-
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
5
|
+
- pixelarraylib create_test_case_files
|
|
6
|
+
- pixelarraylib summary_code_count [options]
|
|
7
|
+
- pixelarraylib collect_code_to_txt [options]
|
|
8
|
+
- pixelarraylib nginx_proxy_to_ecs [options]
|
|
9
|
+
- pixelarraylib remove_empty_lines <input_file> [output_file]
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
12
|
import sys
|
|
@@ -21,11 +21,11 @@ def main():
|
|
|
21
21
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
22
22
|
epilog="""
|
|
23
23
|
示例用法:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
pixelarraylib create_test_case_files --help # 创建测试用例文件
|
|
25
|
+
pixelarraylib summary_code_count --help # 查看统计工具帮助
|
|
26
|
+
pixelarraylib collect_code_to_txt --help # 查看收集工具帮助
|
|
27
|
+
pixelarraylib nginx_proxy_to_ecs --help # 查看Nginx反向代理到ECS工具帮助
|
|
28
|
+
pixelarraylib remove_empty_lines --help # 查看去除空行工具帮助
|
|
29
29
|
""",
|
|
30
30
|
)
|
|
31
31
|
parser.print_help()
|
|
@@ -36,7 +36,7 @@ def main():
|
|
|
36
36
|
if command == "create_test_case_files":
|
|
37
37
|
# 导入并执行创建测试用例文件功能
|
|
38
38
|
try:
|
|
39
|
-
from
|
|
39
|
+
from pixelarraylib.scripts.create_test_case_files import main as create_test_main
|
|
40
40
|
|
|
41
41
|
create_test_main()
|
|
42
42
|
except ImportError as e:
|
|
@@ -46,7 +46,7 @@ def main():
|
|
|
46
46
|
elif command == "summary_code_count":
|
|
47
47
|
# 导入并执行代码统计功能
|
|
48
48
|
try:
|
|
49
|
-
from
|
|
49
|
+
from pixelarraylib.scripts.summary_code_count import main as summary_main
|
|
50
50
|
|
|
51
51
|
# 修改sys.argv,移除第一个参数(arraylib),让summary_code_count正确处理参数
|
|
52
52
|
original_argv = sys.argv
|
|
@@ -60,7 +60,7 @@ def main():
|
|
|
60
60
|
elif command == "collect_code_to_txt":
|
|
61
61
|
# 导入并执行代码收集功能
|
|
62
62
|
try:
|
|
63
|
-
from
|
|
63
|
+
from pixelarraylib.scripts.collect_code_to_txt import main as collect_main
|
|
64
64
|
|
|
65
65
|
# 修改sys.argv,移除第一个参数(arraylib),让collect_code_to_txt正确处理参数
|
|
66
66
|
original_argv = sys.argv
|
|
@@ -74,7 +74,7 @@ def main():
|
|
|
74
74
|
elif command == "nginx_proxy_to_ecs":
|
|
75
75
|
# 导入并执行Nginx反向代理到ECS功能
|
|
76
76
|
try:
|
|
77
|
-
from
|
|
77
|
+
from pixelarraylib.scripts.nginx_proxy_to_ecs import main as nginx_proxy_to_ecs
|
|
78
78
|
|
|
79
79
|
# 修改sys.argv,移除第一个参数(arraylib),让nginx_proxy_to_ecs正确处理参数
|
|
80
80
|
original_argv = sys.argv
|
|
@@ -88,7 +88,7 @@ def main():
|
|
|
88
88
|
elif command == "remove_empty_lines":
|
|
89
89
|
# 导入并执行去除空行功能
|
|
90
90
|
try:
|
|
91
|
-
from
|
|
91
|
+
from pixelarraylib.scripts.remove_empty_lines import main as remove_empty_lines_main
|
|
92
92
|
|
|
93
93
|
# 修改sys.argv,移除第一个参数(arraylib),让remove_empty_lines正确处理参数
|
|
94
94
|
original_argv = sys.argv
|
|
@@ -105,11 +105,11 @@ def main():
|
|
|
105
105
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
106
106
|
epilog="""
|
|
107
107
|
示例用法:
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
108
|
+
pixelarraylib create_test_case_files --help # 创建测试用例文件
|
|
109
|
+
pixelarraylib summary_code_count --help # 查看统计工具帮助
|
|
110
|
+
pixelarraylib collect_code_to_txt --help # 查看收集工具帮助
|
|
111
|
+
pixelarraylib nginx_proxy_to_ecs --help # 查看Nginx反向代理到ECS工具帮助
|
|
112
|
+
pixelarraylib remove_empty_lines --help # 查看去除空行工具帮助
|
|
113
113
|
""",
|
|
114
114
|
)
|
|
115
115
|
parser.print_help()
|
|
@@ -118,7 +118,7 @@ def main():
|
|
|
118
118
|
print(
|
|
119
119
|
"可用命令:create_test_case_files, summary_code_count, collect_code_to_txt, nginx_proxy_to_ecs, remove_empty_lines"
|
|
120
120
|
)
|
|
121
|
-
print("使用 '
|
|
121
|
+
print("使用 'pixelarraylib --help' 查看帮助")
|
|
122
122
|
sys.exit(1)
|
|
123
123
|
|
|
124
124
|
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
from typing import List
|
|
5
|
+
|
|
6
|
+
from alibabacloud_cr20181201.client import Client as cr20181201Client
|
|
7
|
+
from alibabacloud_credentials.client import Client as CredentialClient
|
|
8
|
+
from alibabacloud_tea_openapi import models as open_api_models
|
|
9
|
+
from alibabacloud_cr20181201 import models as cr_20181201_models
|
|
10
|
+
from alibabacloud_tea_util import models as util_models
|
|
11
|
+
from alibabacloud_tea_util.client import Client as UtilClient
|
|
12
|
+
|
|
13
|
+
from pixelarraylib.monitor.feishu import Feishu
|
|
14
|
+
|
|
15
|
+
feishu_alert = Feishu("devtoolkit服务报警")
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ACRUtils:
|
|
19
|
+
def __init__(self, region_id: str, access_key_id: str, access_key_secret: str):
|
|
20
|
+
self.region_id = region_id
|
|
21
|
+
self.access_key_id = access_key_id
|
|
22
|
+
self.access_key_secret = access_key_secret
|
|
23
|
+
self.client = self._create_client()
|
|
24
|
+
|
|
25
|
+
def _create_client(self):
|
|
26
|
+
credential = CredentialClient()
|
|
27
|
+
config = open_api_models.Config(
|
|
28
|
+
credential=credential,
|
|
29
|
+
access_key_id=self.access_key_id,
|
|
30
|
+
access_key_secret=self.access_key_secret,
|
|
31
|
+
)
|
|
32
|
+
# Endpoint 请参考 https://api.aliyun.com/product/cr
|
|
33
|
+
config.endpoint = f"cr.{self.region_id}.aliyuncs.com"
|
|
34
|
+
return cr20181201Client(config)
|
|
35
|
+
|
|
36
|
+
def list_instances(self):
|
|
37
|
+
"""
|
|
38
|
+
description:
|
|
39
|
+
列出容器镜像服务实例
|
|
40
|
+
parameters:
|
|
41
|
+
None
|
|
42
|
+
return:
|
|
43
|
+
dict: 包含实例列表的响应数据
|
|
44
|
+
success(bool): 是否成功
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
request = cr_20181201_models.ListInstanceRequest()
|
|
49
|
+
response = self.client.list_instance(request)
|
|
50
|
+
return response.body.to_map(), True
|
|
51
|
+
except Exception as e:
|
|
52
|
+
feishu_alert.send(f"列出实例失败: {e}")
|
|
53
|
+
return {}, False
|
|
54
|
+
|
|
55
|
+
def create_namespace(self, instance_id: str, namespace_name: str):
|
|
56
|
+
"""
|
|
57
|
+
description:
|
|
58
|
+
创建命名空间
|
|
59
|
+
parameters:
|
|
60
|
+
instance_id (str): 实例ID
|
|
61
|
+
namespace_name (str): 命名空间名称
|
|
62
|
+
return:
|
|
63
|
+
dict: 创建结果
|
|
64
|
+
success(bool): 是否成功
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
try:
|
|
68
|
+
request = cr_20181201_models.CreateNamespaceRequest(
|
|
69
|
+
instance_id=instance_id, namespace_name=namespace_name
|
|
70
|
+
)
|
|
71
|
+
response = self.client.create_namespace(request)
|
|
72
|
+
return response.body.to_map(), True
|
|
73
|
+
except Exception as e:
|
|
74
|
+
feishu_alert.send(f"创建命名空间失败: {e}")
|
|
75
|
+
return {}, False
|
|
76
|
+
|
|
77
|
+
def delete_namespace(self, instance_id: str, namespace_name: str):
|
|
78
|
+
"""
|
|
79
|
+
description:
|
|
80
|
+
删除命名空间
|
|
81
|
+
parameters:
|
|
82
|
+
instance_id (str): 实例ID
|
|
83
|
+
namespace_name (str): 命名空间名称
|
|
84
|
+
return:
|
|
85
|
+
dict: 删除结果
|
|
86
|
+
success(bool): 是否成功
|
|
87
|
+
"""
|
|
88
|
+
try:
|
|
89
|
+
request = cr_20181201_models.DeleteNamespaceRequest(
|
|
90
|
+
instance_id=instance_id, namespace_name=namespace_name
|
|
91
|
+
)
|
|
92
|
+
response = self.client.delete_namespace(request)
|
|
93
|
+
return response.body.to_map(), True
|
|
94
|
+
except Exception as e:
|
|
95
|
+
feishu_alert.send(f"删除命名空间失败: {e}")
|
|
96
|
+
return {}, False
|
|
97
|
+
|
|
98
|
+
def list_namespaces(self, instance_id: str):
|
|
99
|
+
"""
|
|
100
|
+
description:
|
|
101
|
+
列出命名空间
|
|
102
|
+
parameters:
|
|
103
|
+
instance_id (str): 实例ID
|
|
104
|
+
return:
|
|
105
|
+
dict: 包含命名空间列表的响应数据
|
|
106
|
+
success(bool): 是否成功
|
|
107
|
+
"""
|
|
108
|
+
try:
|
|
109
|
+
request = cr_20181201_models.ListNamespaceRequest(instance_id=instance_id)
|
|
110
|
+
response = self.client.list_namespace(request)
|
|
111
|
+
return response.body.to_map(), True
|
|
112
|
+
except Exception as e:
|
|
113
|
+
feishu_alert.send(f"列出命名空间失败: {e}")
|
|
114
|
+
return {}, False
|
|
115
|
+
|
|
116
|
+
def create_repository(
|
|
117
|
+
self, instance_id: str, namespace_name: str, repository_name: str, repository_type: str, summary: str
|
|
118
|
+
):
|
|
119
|
+
"""
|
|
120
|
+
description:
|
|
121
|
+
创建仓库
|
|
122
|
+
parameters:
|
|
123
|
+
instance_id (str): 实例ID
|
|
124
|
+
namespace_name (str): 命名空间名称
|
|
125
|
+
repository_name (str): 仓库名称
|
|
126
|
+
repository_type (str): 仓库类型
|
|
127
|
+
summary (str): 仓库摘要
|
|
128
|
+
return:
|
|
129
|
+
dict: 创建结果
|
|
130
|
+
success(bool): 是否成功
|
|
131
|
+
"""
|
|
132
|
+
try:
|
|
133
|
+
request = cr_20181201_models.CreateRepositoryRequest(
|
|
134
|
+
instance_id=instance_id,
|
|
135
|
+
repo_namespace_name=namespace_name,
|
|
136
|
+
repo_name=repository_name,
|
|
137
|
+
repo_type=repository_type,
|
|
138
|
+
summary=summary
|
|
139
|
+
)
|
|
140
|
+
response = self.client.create_repository(request)
|
|
141
|
+
return response.body.to_map(), True
|
|
142
|
+
except Exception as e:
|
|
143
|
+
feishu_alert.send(f"创建仓库失败: {e}")
|
|
144
|
+
return {}, False
|
|
145
|
+
|
|
146
|
+
def list_repositories(self, instance_id: str, namespace_name: str):
|
|
147
|
+
"""
|
|
148
|
+
description:
|
|
149
|
+
列出仓库
|
|
150
|
+
parameters:
|
|
151
|
+
instance_id (str): 实例ID
|
|
152
|
+
namespace_name (str): 命名空间名称
|
|
153
|
+
return:
|
|
154
|
+
dict: 包含仓库列表的响应数据
|
|
155
|
+
success(bool): 是否成功
|
|
156
|
+
"""
|
|
157
|
+
try:
|
|
158
|
+
request = cr_20181201_models.ListRepositoryRequest(
|
|
159
|
+
instance_id=instance_id, repo_namespace_name=namespace_name
|
|
160
|
+
)
|
|
161
|
+
response = self.client.list_repository(request)
|
|
162
|
+
return response.body.to_map(), True
|
|
163
|
+
except Exception as e:
|
|
164
|
+
feishu_alert.send(f"列出仓库失败: {e}")
|
|
165
|
+
return {}, False
|
|
166
|
+
|
|
167
|
+
def delete_repository(
|
|
168
|
+
self, instance_id: str, namespace_name: str, repository_id: str
|
|
169
|
+
):
|
|
170
|
+
"""
|
|
171
|
+
description:
|
|
172
|
+
删除仓库
|
|
173
|
+
parameters:
|
|
174
|
+
instance_id (str): 实例ID
|
|
175
|
+
namespace_name (str): 命名空间名称
|
|
176
|
+
repository_id (str): 仓库ID
|
|
177
|
+
return:
|
|
178
|
+
dict: 删除结果
|
|
179
|
+
success(bool): 是否成功
|
|
180
|
+
"""
|
|
181
|
+
try:
|
|
182
|
+
request = cr_20181201_models.DeleteRepositoryRequest(
|
|
183
|
+
instance_id=instance_id,
|
|
184
|
+
repo_namespace_name=namespace_name,
|
|
185
|
+
repo_id=repository_id,
|
|
186
|
+
)
|
|
187
|
+
response = self.client.delete_repository(request)
|
|
188
|
+
return response.body.to_map(), True
|
|
189
|
+
except Exception as e:
|
|
190
|
+
feishu_alert.send(f"删除仓库失败: {e}")
|
|
191
|
+
return {}, False
|
|
192
|
+
|
|
193
|
+
def get_repository(
|
|
194
|
+
self, instance_id: str, namespace_name: str, repository_name: str
|
|
195
|
+
):
|
|
196
|
+
"""
|
|
197
|
+
description:
|
|
198
|
+
获取仓库详情信息
|
|
199
|
+
parameters:
|
|
200
|
+
instance_id (str): 实例ID
|
|
201
|
+
namespace_name (str): 命名空间名称
|
|
202
|
+
repository_name (str): 仓库名称
|
|
203
|
+
return:
|
|
204
|
+
dict: 详情信息
|
|
205
|
+
success(bool): 是否成功
|
|
206
|
+
"""
|
|
207
|
+
try:
|
|
208
|
+
request = cr_20181201_models.GetRepositoryRequest(
|
|
209
|
+
instance_id=instance_id,
|
|
210
|
+
repo_namespace_name=namespace_name,
|
|
211
|
+
repo_name=repository_name,
|
|
212
|
+
)
|
|
213
|
+
response = self.client.get_repository(request)
|
|
214
|
+
return response.body.to_map(), True
|
|
215
|
+
except Exception as e:
|
|
216
|
+
feishu_alert.send(f"获取仓库详情失败: {e}")
|
|
217
|
+
return {}, False
|
|
@@ -6,7 +6,7 @@ from alibabacloud_dm20151123.client import Client as Dm20151123Client
|
|
|
6
6
|
from alibabacloud_tea_openapi import models as open_api_models
|
|
7
7
|
from alibabacloud_dm20151123 import models as dm_20151123_models
|
|
8
8
|
from alibabacloud_tea_util import models as util_models
|
|
9
|
-
from
|
|
9
|
+
from pixelarraylib.monitor.feishu import Feishu
|
|
10
10
|
|
|
11
11
|
feishu_alert = Feishu("devtoolkit服务报警")
|
|
12
12
|
|
|
@@ -5,7 +5,7 @@ from alibabacloud_bssopenapi20171214.client import Client as BssOpenApi20171214C
|
|
|
5
5
|
from alibabacloud_tea_openapi import models as open_api_models
|
|
6
6
|
from alibabacloud_bssopenapi20171214 import models as bss_open_api_20171214_models
|
|
7
7
|
from alibabacloud_tea_util import models as util_models
|
|
8
|
-
from
|
|
8
|
+
from pixelarraylib.monitor.feishu import Feishu
|
|
9
9
|
|
|
10
10
|
feishu_alert = Feishu("devtoolkit服务报警")
|
|
11
11
|
|
{pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/aliyun/content_scanner.py
RENAMED
|
@@ -13,7 +13,7 @@ from alibabacloud_green20220302.models import (
|
|
|
13
13
|
)
|
|
14
14
|
from alibabacloud_tea_openapi.models import Config
|
|
15
15
|
from alibabacloud_tea_util import models as util_models
|
|
16
|
-
from
|
|
16
|
+
from pixelarraylib.monitor.feishu import Feishu
|
|
17
17
|
feishu_alert = Feishu("devtoolkit服务报警")
|
|
18
18
|
|
|
19
19
|
class ContentScanner:
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from operator import contains
|
|
3
|
+
import traceback
|
|
4
|
+
from typing import Optional, Dict, Any, List
|
|
5
|
+
from alibabacloud_eci20180808.client import Client as EciClient
|
|
6
|
+
from alibabacloud_eci20180808.models import (
|
|
7
|
+
CreateContainerGroupRequest,
|
|
8
|
+
DescribeContainerGroupsRequest,
|
|
9
|
+
CreateContainerGroupRequestContainer,
|
|
10
|
+
CreateContainerGroupRequestImageRegistryCredential,
|
|
11
|
+
CreateContainerGroupRequestTag,
|
|
12
|
+
CreateContainerGroupRequest,
|
|
13
|
+
)
|
|
14
|
+
from alibabacloud_tea_openapi import models as open_api_models
|
|
15
|
+
from alibabacloud_tea_util import models as util_models
|
|
16
|
+
from pixelarraylib.monitor.feishu import Feishu
|
|
17
|
+
|
|
18
|
+
feishu_alert = Feishu("devtoolkit服务报警")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ECIUtils:
|
|
22
|
+
def __init__(self, region_id: str, access_key_id: str, access_key_secret: str):
|
|
23
|
+
"""
|
|
24
|
+
description:
|
|
25
|
+
初始化ECI工具类
|
|
26
|
+
parameters:
|
|
27
|
+
region_id(str): 地域ID
|
|
28
|
+
access_key_id(str): 访问密钥ID
|
|
29
|
+
access_key_secret(str): 访问密钥Secret
|
|
30
|
+
"""
|
|
31
|
+
self.region_id = region_id
|
|
32
|
+
self.access_key_id = access_key_id
|
|
33
|
+
self.access_key_secret = access_key_secret
|
|
34
|
+
self.client = self._create_client()
|
|
35
|
+
|
|
36
|
+
def _create_client(self) -> EciClient:
|
|
37
|
+
"""
|
|
38
|
+
description:
|
|
39
|
+
创建ECI客户端
|
|
40
|
+
return:
|
|
41
|
+
EciClient: ECI客户端实例
|
|
42
|
+
"""
|
|
43
|
+
config = open_api_models.Config(
|
|
44
|
+
access_key_id=self.access_key_id,
|
|
45
|
+
access_key_secret=self.access_key_secret,
|
|
46
|
+
region_id=self.region_id,
|
|
47
|
+
endpoint=f"eci.{self.region_id}.aliyuncs.com",
|
|
48
|
+
)
|
|
49
|
+
return EciClient(config)
|
|
50
|
+
|
|
51
|
+
def create_container_group(
|
|
52
|
+
self,
|
|
53
|
+
container_group_name: str,
|
|
54
|
+
acr_region_id: str,
|
|
55
|
+
acr_credentials: Dict,
|
|
56
|
+
images: List[Dict[str, Any]],
|
|
57
|
+
instance_type: str = "ecs.c1.small",
|
|
58
|
+
zone_id: str = "a",
|
|
59
|
+
restart_policy: str = "Always",
|
|
60
|
+
):
|
|
61
|
+
"""
|
|
62
|
+
description:
|
|
63
|
+
创建容器组
|
|
64
|
+
parameters:
|
|
65
|
+
container_group_name(str): 容器组名称
|
|
66
|
+
acr_region_id(str): ACR地域ID
|
|
67
|
+
acr_credentials(Dict): ACR凭证
|
|
68
|
+
images(List[Dict[str, Any]]): 镜像列表
|
|
69
|
+
instance_type(str): 实例类型
|
|
70
|
+
zone_id(str): 可用区ID
|
|
71
|
+
restart_policy(str): 重启策略
|
|
72
|
+
return:
|
|
73
|
+
dict: 创建结果
|
|
74
|
+
success(bool): 是否成功
|
|
75
|
+
"""
|
|
76
|
+
containers = []
|
|
77
|
+
for image in images:
|
|
78
|
+
container_0 = CreateContainerGroupRequestContainer(
|
|
79
|
+
name=image["repository_name"],
|
|
80
|
+
image=f"pixelarrayai-registry-vpc.{acr_region_id}.cr.aliyuncs.com/{image['namespace_name']}/{image['repository_name']}:latest",
|
|
81
|
+
)
|
|
82
|
+
containers.append(container_0)
|
|
83
|
+
|
|
84
|
+
image_registry_credentials = [
|
|
85
|
+
CreateContainerGroupRequestImageRegistryCredential(
|
|
86
|
+
password=acr_credentials["password"],
|
|
87
|
+
server=f"pixelarrayai-registry-vpc.{acr_region_id}.cr.aliyuncs.com",
|
|
88
|
+
user_name=acr_credentials["user_name"],
|
|
89
|
+
)
|
|
90
|
+
]
|
|
91
|
+
|
|
92
|
+
tag_0 = CreateContainerGroupRequestTag(key="team", value="pixelarrayai")
|
|
93
|
+
create_container_group_request = CreateContainerGroupRequest(
|
|
94
|
+
region_id=self.region_id,
|
|
95
|
+
zone_id=f"{self.region_id}-{zone_id}",
|
|
96
|
+
container_group_name=container_group_name,
|
|
97
|
+
restart_policy=restart_policy,
|
|
98
|
+
cpu=1,
|
|
99
|
+
memory=2,
|
|
100
|
+
resource_group_id="rg-acfm3aqovjsymaa",
|
|
101
|
+
dns_policy="Default",
|
|
102
|
+
instance_type=instance_type,
|
|
103
|
+
active_deadline_seconds=600,
|
|
104
|
+
spot_strategy="SpotAsPriceGo",
|
|
105
|
+
host_name="ecitest",
|
|
106
|
+
tag=[tag_0],
|
|
107
|
+
image_registry_credential=image_registry_credentials,
|
|
108
|
+
termination_grace_period_seconds=60,
|
|
109
|
+
container=[container_0],
|
|
110
|
+
auto_match_image_cache=False,
|
|
111
|
+
share_process_namespace=True,
|
|
112
|
+
schedule_strategy="VSwitchOrdered",
|
|
113
|
+
)
|
|
114
|
+
runtime = util_models.RuntimeOptions()
|
|
115
|
+
try:
|
|
116
|
+
# 复制代码运行请自行打印 API 的返回值
|
|
117
|
+
response = self.client.create_container_group_with_options(
|
|
118
|
+
create_container_group_request, runtime
|
|
119
|
+
)
|
|
120
|
+
return response.body.to_map(), True
|
|
121
|
+
except Exception as error:
|
|
122
|
+
feishu_alert.send(f"创建容器组失败: {error}")
|
|
123
|
+
return {}, False
|
|
124
|
+
|
|
125
|
+
def describe_container_group(self, container_group_id: str):
|
|
126
|
+
"""
|
|
127
|
+
description:
|
|
128
|
+
查询容器组
|
|
129
|
+
parameters:
|
|
130
|
+
container_group_id(str): 容器组ID
|
|
131
|
+
return:
|
|
132
|
+
dict: 查询结果
|
|
133
|
+
"""
|
|
134
|
+
try:
|
|
135
|
+
describe_container_groups_request = DescribeContainerGroupsRequest(
|
|
136
|
+
container_group_id=container_group_id
|
|
137
|
+
)
|
|
138
|
+
runtime = util_models.RuntimeOptions()
|
|
139
|
+
response = self.client.describe_container_groups_with_options(
|
|
140
|
+
describe_container_groups_request, runtime
|
|
141
|
+
)
|
|
142
|
+
return response.body.to_map()
|
|
143
|
+
except Exception as error:
|
|
144
|
+
feishu_alert.send(f"查询容器组失败: {error}")
|
|
145
|
+
return {}
|
|
146
|
+
|
|
147
|
+
def list_container_groups(self):
|
|
148
|
+
"""
|
|
149
|
+
description:
|
|
150
|
+
查询容器组列表
|
|
151
|
+
parameters:
|
|
152
|
+
None
|
|
153
|
+
return:
|
|
154
|
+
dict: 查询结果
|
|
155
|
+
"""
|
|
156
|
+
try:
|
|
157
|
+
list_container_groups_request = ListContainerGroupsRequest()
|
|
158
|
+
runtime = util_models.RuntimeOptions()
|
|
159
|
+
response = self.client.list_container_groups_with_options(
|
|
160
|
+
list_container_groups_request, runtime
|
|
161
|
+
)
|
|
162
|
+
return response.body.to_map()
|
|
163
|
+
except Exception as error:
|
|
164
|
+
feishu_alert.send(f"查询容器组列表失败: {error}")
|
|
165
|
+
return {}
|
|
@@ -8,8 +8,8 @@ from alibabacloud_tea_openapi import models as open_api_models
|
|
|
8
8
|
from alibabacloud_darabonba_stream.client import Client as StreamClient
|
|
9
9
|
from alibabacloud_fc20230330 import models as fc20230330_models
|
|
10
10
|
from alibabacloud_tea_util import models as util_models
|
|
11
|
-
from
|
|
12
|
-
from
|
|
11
|
+
from pixelarraylib.monitor.feishu import Feishu
|
|
12
|
+
from pixelarraylib.system.common import execute_command, file_to_base64
|
|
13
13
|
|
|
14
14
|
feishu_alert = Feishu("devtoolkit服务报警")
|
|
15
15
|
|
|
@@ -11,8 +11,8 @@ from hashlib import sha1
|
|
|
11
11
|
from datetime import datetime
|
|
12
12
|
from urllib.parse import quote, urlencode
|
|
13
13
|
from datetime import datetime
|
|
14
|
-
from
|
|
15
|
-
from
|
|
14
|
+
from pixelarraylib.system.common import size_unit_convert, percentage
|
|
15
|
+
from pixelarraylib.monitor.feishu import Feishu
|
|
16
16
|
import aiofiles
|
|
17
17
|
from concurrent.futures import ThreadPoolExecutor
|
|
18
18
|
|
|
@@ -4,7 +4,7 @@ from alibabacloud_dysmsapi20170525.client import Client as Dysmsapi20170525Clien
|
|
|
4
4
|
from alibabacloud_tea_openapi import models as open_api_models
|
|
5
5
|
from alibabacloud_dysmsapi20170525 import models as dysmsapi_20170525_models
|
|
6
6
|
from alibabacloud_tea_util import models as util_models
|
|
7
|
-
from
|
|
7
|
+
from pixelarraylib.monitor.feishu import Feishu
|
|
8
8
|
feishu_alert = Feishu("devtoolkit服务报警")
|
|
9
9
|
|
|
10
10
|
class SMSUtils:
|
|
@@ -5,8 +5,8 @@ from alibabacloud_sts20150401.client import Client as StsClient
|
|
|
5
5
|
from alibabacloud_tea_openapi import models as open_api_models
|
|
6
6
|
from alibabacloud_sts20150401 import models as sts_20150401_models
|
|
7
7
|
from alibabacloud_tea_util import models as util_models
|
|
8
|
-
from
|
|
9
|
-
from
|
|
8
|
+
from pixelarraylib.monitor.feishu import Feishu
|
|
9
|
+
from pixelarraylib.db_utils.redis import RedisUtils
|
|
10
10
|
|
|
11
11
|
feishu_alert = Feishu("devtoolkit服务报警")
|
|
12
12
|
|
|
@@ -8,7 +8,7 @@ from typing import Callable, Any
|
|
|
8
8
|
from time import sleep
|
|
9
9
|
from functools import wraps
|
|
10
10
|
from concurrent.futures import ThreadPoolExecutor, TimeoutError
|
|
11
|
-
from
|
|
11
|
+
from pixelarraylib.monitor.feishu import Feishu
|
|
12
12
|
import inspect
|
|
13
13
|
|
|
14
14
|
|
|
@@ -13,6 +13,7 @@ class Feishu:
|
|
|
13
13
|
"knowledgebase微服务报警": "https://open.feishu.cn/open-apis/bot/v2/hook/5f007914-235a-4287-8349-6c1dd7c70024",
|
|
14
14
|
"llm微服务报警": "https://open.feishu.cn/open-apis/bot/v2/hook/54942aa6-24f1-4851-8fe9-d7c87572d00a",
|
|
15
15
|
"thirdparty微服务报警": "https://open.feishu.cn/open-apis/bot/v2/hook/b1e6237a-1323-4ad9-96f4-d74de5cdc00f",
|
|
16
|
+
"picturebed服务报警": "https://open.feishu.cn/open-apis/bot/v2/hook/d3c2e68c-3ed3-4832-9b66-76db5bd69b42",
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
def __init__(self, channel_name):
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""
|
|
2
|
+
ArrayLib 脚本工具包
|
|
3
|
+
包含各种实用的命令行工具和脚本
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
__version__ = "1.0.2"
|
|
7
|
+
__author__ = "Lu qi"
|
|
8
|
+
|
|
9
|
+
# 导出主要的脚本函数
|
|
10
|
+
from pixelarraylib.scripts.create_test_case_files import main as create_test_case_files
|
|
11
|
+
from pixelarraylib.scripts.summary_code_count import main as summary_code_count
|
|
12
|
+
from pixelarraylib.scripts.collect_code_to_txt import main as collect_code_to_txt
|
|
13
|
+
from pixelarraylib.scripts.nginx_proxy_to_ecs import main as nginx_proxy_to_ecs
|
|
14
|
+
from pixelarraylib.scripts.remove_empty_lines import main as remove_empty_lines
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"create_test_case_files",
|
|
18
|
+
"summary_code_count",
|
|
19
|
+
"collect_code_to_txt",
|
|
20
|
+
"nginx_proxy_to_ecs",
|
|
21
|
+
"remove_empty_lines",
|
|
22
|
+
]
|
{pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/scripts/collect_code_to_txt.py
RENAMED
|
@@ -5,12 +5,12 @@ Git仓库代码收集工具
|
|
|
5
5
|
|
|
6
6
|
使用方法:
|
|
7
7
|
1. 作为命令行工具:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
pixelarraylib collect_code_to_txt --output=all_code.txt
|
|
9
|
+
pixelarraylib collect_code_to_txt --extensions="py,js,vue" --output=frontend_code.txt
|
|
10
|
+
pixelarraylib collect_code_to_txt --since="2024-01-01" --output=recent_code.txt
|
|
11
11
|
|
|
12
12
|
2. 作为Python模块:
|
|
13
|
-
from
|
|
13
|
+
from pixelarraylib.scripts.collect_code_to_txt import collect_git_repos_code
|
|
14
14
|
collect_git_repos_code(output_file="code.txt")
|
|
15
15
|
"""
|
|
16
16
|
|
{pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/scripts/create_test_case_files.py
RENAMED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
本脚本用于一键创建所有测试用例文件
|
|
3
3
|
使用方法:
|
|
4
4
|
1. 作为命令行工具:
|
|
5
|
-
|
|
5
|
+
pixelarraylib create_test_case_files
|
|
6
6
|
|
|
7
7
|
2. 作为Python模块:
|
|
8
|
-
from
|
|
8
|
+
from pixelarraylib.scripts.create_test_case_files import main
|
|
9
9
|
main()
|
|
10
10
|
"""
|
|
11
11
|
|
{pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/scripts/nginx_proxy_to_ecs.py
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import argparse
|
|
2
2
|
import base64
|
|
3
|
-
from
|
|
4
|
-
from
|
|
3
|
+
from pixelarraylib.system.common import execute_command_through_ssh
|
|
4
|
+
from pixelarraylib.aliyun.domain import DomainUtils
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
def nginx_proxy_file_template(
|
{pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/scripts/remove_empty_lines.py
RENAMED
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
去除Markdown文档中的所有空行
|
|
4
4
|
|
|
5
5
|
用法:
|
|
6
|
-
|
|
6
|
+
pixelarraylib remove_empty_lines <input_file> [output_file]
|
|
7
7
|
|
|
8
8
|
参数:
|
|
9
9
|
input_file 输入的Markdown文件路径
|
|
10
10
|
output_file 输出的文件路径(可选,默认覆盖原文件)
|
|
11
11
|
|
|
12
12
|
示例:
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
pixelarraylib remove_empty_lines test.md
|
|
14
|
+
pixelarraylib remove_empty_lines test.md output.md
|
|
15
15
|
"""
|
|
16
16
|
|
|
17
17
|
import sys
|
|
@@ -74,8 +74,8 @@ def main():
|
|
|
74
74
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
75
75
|
epilog="""
|
|
76
76
|
示例用法:
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
pixelarraylib remove_empty_lines test.md # 去除test.md中的空行并覆盖原文件
|
|
78
|
+
pixelarraylib remove_empty_lines test.md output.md # 去除test.md中的空行并保存到output.md
|
|
79
79
|
"""
|
|
80
80
|
)
|
|
81
81
|
|
{pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/scripts/summary_code_count.py
RENAMED
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
|
|
6
6
|
使用方法:
|
|
7
7
|
1. 作为命令行工具:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
pixelarraylib summary_code_count --since="2025-05-09"
|
|
9
|
+
pixelarraylib summary_code_count --author="张三"
|
|
10
|
+
pixelarraylib summary_code_count --output=stats.csv
|
|
11
|
+
pixelarraylib summary_code_count --file-types="py,js,vue"
|
|
12
12
|
|
|
13
13
|
2. 作为Python模块:
|
|
14
|
-
from
|
|
14
|
+
from pixelarraylib.scripts.summary_code_count import main
|
|
15
15
|
main()
|
|
16
16
|
"""
|
|
17
17
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pixelarraylib
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.2
|
|
4
4
|
Summary: PixelArray Python开发工具库 - 包含阿里云服务、数据库工具、装饰器、监控等功能
|
|
5
5
|
Author-email: Lu qi <qi.lu@pixelarrayai.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -32,11 +32,11 @@ Requires-Dist: alibabacloud_sts20150401
|
|
|
32
32
|
Requires-Dist: alibabacloud_alidns20150109
|
|
33
33
|
Requires-Dist: alibabacloud_eci20180808
|
|
34
34
|
Requires-Dist: alibabacloud_bssopenapi20171214
|
|
35
|
+
Requires-Dist: alibabacloud_cr20181201
|
|
35
36
|
Requires-Dist: oss2
|
|
36
37
|
Requires-Dist: pymysql
|
|
37
38
|
Requires-Dist: aiomysql
|
|
38
39
|
Requires-Dist: redis
|
|
39
|
-
Requires-Dist: redis[async]
|
|
40
40
|
Requires-Dist: requests
|
|
41
41
|
Requires-Dist: aiohttp
|
|
42
42
|
Requires-Dist: asyncio
|
|
@@ -63,12 +63,12 @@ pip install pixelarraylib
|
|
|
63
63
|
|
|
64
64
|
```python
|
|
65
65
|
# 导入pixelarraylib模块
|
|
66
|
-
import
|
|
66
|
+
import pixelarraylib
|
|
67
67
|
|
|
68
68
|
# 使用各种功能模块
|
|
69
|
-
from
|
|
70
|
-
from
|
|
71
|
-
from
|
|
69
|
+
from pixelarraylib.aliyun import some_service
|
|
70
|
+
from pixelarraylib.db_utils import database_tools
|
|
71
|
+
from pixelarraylib.decorators import useful_decorators
|
|
72
72
|
```
|
|
73
73
|
|
|
74
74
|
### 2. 命令行工具使用
|
|
@@ -128,9 +128,9 @@ pixelarraylib --help
|
|
|
128
128
|
|
|
129
129
|
### 添加新的命令行工具
|
|
130
130
|
|
|
131
|
-
1. 在 `
|
|
132
|
-
2. 在 `
|
|
133
|
-
3. 更新 `
|
|
131
|
+
1. 在 `pixelarraylib/scripts/` 目录下创建新的脚本文件
|
|
132
|
+
2. 在 `pixelarraylib/__main__.py` 中添加新的命令选项
|
|
133
|
+
3. 更新 `pixelarraylib/scripts/__init__.py` 导出新功能
|
|
134
134
|
|
|
135
135
|
## 许可证
|
|
136
136
|
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
MANIFEST.in
|
|
3
|
+
README.md
|
|
4
|
+
pyproject.toml
|
|
5
|
+
requirements.txt
|
|
6
|
+
pixelarraylib/__init__.py
|
|
7
|
+
pixelarraylib/__main__.py
|
|
8
|
+
pixelarraylib.egg-info/PKG-INFO
|
|
9
|
+
pixelarraylib.egg-info/SOURCES.txt
|
|
10
|
+
pixelarraylib.egg-info/dependency_links.txt
|
|
11
|
+
pixelarraylib.egg-info/entry_points.txt
|
|
12
|
+
pixelarraylib.egg-info/requires.txt
|
|
13
|
+
pixelarraylib.egg-info/top_level.txt
|
|
14
|
+
pixelarraylib/aliyun/__init__.py
|
|
15
|
+
pixelarraylib/aliyun/acr.py
|
|
16
|
+
pixelarraylib/aliyun/aliyun_email.py
|
|
17
|
+
pixelarraylib/aliyun/billing.py
|
|
18
|
+
pixelarraylib/aliyun/content_scanner.py
|
|
19
|
+
pixelarraylib/aliyun/domain.py
|
|
20
|
+
pixelarraylib/aliyun/eci.py
|
|
21
|
+
pixelarraylib/aliyun/ecs.py
|
|
22
|
+
pixelarraylib/aliyun/fc.py
|
|
23
|
+
pixelarraylib/aliyun/oss.py
|
|
24
|
+
pixelarraylib/aliyun/sms.py
|
|
25
|
+
pixelarraylib/aliyun/sts.py
|
|
26
|
+
pixelarraylib/db_utils/mysql.py
|
|
27
|
+
pixelarraylib/db_utils/redis.py
|
|
28
|
+
pixelarraylib/decorators/__init__.py
|
|
29
|
+
pixelarraylib/decorators/decorators.py
|
|
30
|
+
pixelarraylib/gitlab/__init__.py
|
|
31
|
+
pixelarraylib/gitlab/code_analyzer.py
|
|
32
|
+
pixelarraylib/gitlab/pypi_package_manager.py
|
|
33
|
+
pixelarraylib/monitor/__init__.py
|
|
34
|
+
pixelarraylib/monitor/feishu.py
|
|
35
|
+
pixelarraylib/net/request.py
|
|
36
|
+
pixelarraylib/scripts/__init__.py
|
|
37
|
+
pixelarraylib/scripts/collect_code_to_txt.py
|
|
38
|
+
pixelarraylib/scripts/create_test_case_files.py
|
|
39
|
+
pixelarraylib/scripts/nginx_proxy_to_ecs.py
|
|
40
|
+
pixelarraylib/scripts/remove_empty_lines.py
|
|
41
|
+
pixelarraylib/scripts/summary_code_count.py
|
|
42
|
+
pixelarraylib/system/__init__.py
|
|
43
|
+
pixelarraylib/system/common.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pixelarraylib
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pixelarraylib"
|
|
7
|
-
version = "1.0.
|
|
7
|
+
version = "1.0.2"
|
|
8
8
|
authors = [
|
|
9
9
|
{name = "Lu qi", email = "qi.lu@pixelarrayai.com"},
|
|
10
10
|
]
|
|
@@ -37,11 +37,11 @@ dependencies = [
|
|
|
37
37
|
"alibabacloud_alidns20150109",
|
|
38
38
|
"alibabacloud_eci20180808",
|
|
39
39
|
"alibabacloud_bssopenapi20171214",
|
|
40
|
+
"alibabacloud_cr20181201",
|
|
40
41
|
"oss2",
|
|
41
42
|
"pymysql",
|
|
42
43
|
"aiomysql",
|
|
43
44
|
"redis",
|
|
44
|
-
"redis[async]",
|
|
45
45
|
"requests",
|
|
46
46
|
"aiohttp",
|
|
47
47
|
"asyncio",
|
|
@@ -53,7 +53,7 @@ dependencies = [
|
|
|
53
53
|
]
|
|
54
54
|
|
|
55
55
|
[project.scripts]
|
|
56
|
-
pixelarraylib = "
|
|
56
|
+
pixelarraylib = "pixelarraylib.__main__:main"
|
|
57
57
|
|
|
58
58
|
[project.urls]
|
|
59
59
|
"Homepage" = "https://gitlab.com/pixelarrayai/general_pythondevutils_lib"
|
|
@@ -63,10 +63,10 @@ pixelarraylib = "arraylib.__main__:main"
|
|
|
63
63
|
[tool.setuptools]
|
|
64
64
|
|
|
65
65
|
[tool.setuptools.packages.find]
|
|
66
|
-
include = ["
|
|
66
|
+
include = ["pixelarraylib", "pixelarraylib.*"]
|
|
67
67
|
|
|
68
68
|
[tool.setuptools.package-data]
|
|
69
|
-
|
|
69
|
+
pixelarraylib = ["*"]
|
|
70
70
|
|
|
71
71
|
[tool.setuptools.package-dir]
|
|
72
|
-
|
|
72
|
+
pixelarraylib = "pixelarraylib"
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
import traceback
|
|
3
|
-
from typing import Optional, Dict, Any, List
|
|
4
|
-
from alibabacloud_eci20180808.client import Client as EciClient
|
|
5
|
-
from alibabacloud_eci20180808.models import (
|
|
6
|
-
CreateContainerGroupRequest,
|
|
7
|
-
DescribeContainerGroupsRequest,
|
|
8
|
-
DeleteContainerGroupRequest,
|
|
9
|
-
UpdateContainerGroupRequest,
|
|
10
|
-
RestartContainerGroupRequest,
|
|
11
|
-
)
|
|
12
|
-
from alibabacloud_tea_openapi import models as open_api_models
|
|
13
|
-
from alibabacloud_tea_util import models as util_models
|
|
14
|
-
from arraylib.monitor.feishu import Feishu
|
|
15
|
-
|
|
16
|
-
feishu_alert = Feishu("devtoolkit服务报警")
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class ECIUtils:
|
|
20
|
-
def __init__(self, region_id: str, access_key_id: str, access_key_secret: str):
|
|
21
|
-
"""
|
|
22
|
-
description:
|
|
23
|
-
初始化ECI工具类
|
|
24
|
-
parameters:
|
|
25
|
-
region_id(str): 地域ID
|
|
26
|
-
access_key_id(str): 访问密钥ID
|
|
27
|
-
access_key_secret(str): 访问密钥Secret
|
|
28
|
-
"""
|
|
29
|
-
self.region_id = region_id
|
|
30
|
-
self.access_key_id = access_key_id
|
|
31
|
-
self.access_key_secret = access_key_secret
|
|
32
|
-
self.client = self._create_client()
|
|
33
|
-
|
|
34
|
-
def _create_client(self) -> EciClient:
|
|
35
|
-
"""
|
|
36
|
-
description:
|
|
37
|
-
创建ECI客户端
|
|
38
|
-
return:
|
|
39
|
-
EciClient: ECI客户端实例
|
|
40
|
-
"""
|
|
41
|
-
config = open_api_models.Config(
|
|
42
|
-
access_key_id=self.access_key_id,
|
|
43
|
-
access_key_secret=self.access_key_secret,
|
|
44
|
-
region_id=self.region_id,
|
|
45
|
-
endpoint=f"eci.{self.region_id}.aliyuncs.com",
|
|
46
|
-
)
|
|
47
|
-
return EciClient(config)
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
ArrayLib 脚本工具包
|
|
3
|
-
包含各种实用的命令行工具和脚本
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
__version__ = "1.0.0"
|
|
7
|
-
__author__ = "Lu qi"
|
|
8
|
-
|
|
9
|
-
# 导出主要的脚本函数
|
|
10
|
-
from arraylib.scripts.create_test_case_files import main as create_test_case_files
|
|
11
|
-
from arraylib.scripts.summary_code_count import main as summary_code_count
|
|
12
|
-
from arraylib.scripts.collect_code_to_txt import main as collect_code_to_txt
|
|
13
|
-
from arraylib.scripts.nginx_proxy_to_ecs import main as nginx_proxy_to_ecs
|
|
14
|
-
from arraylib.scripts.remove_empty_lines import main as remove_empty_lines
|
|
15
|
-
|
|
16
|
-
__all__ = [
|
|
17
|
-
"create_test_case_files",
|
|
18
|
-
"summary_code_count",
|
|
19
|
-
"collect_code_to_txt",
|
|
20
|
-
"nginx_proxy_to_ecs",
|
|
21
|
-
"remove_empty_lines",
|
|
22
|
-
]
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
LICENSE
|
|
2
|
-
MANIFEST.in
|
|
3
|
-
README.md
|
|
4
|
-
pyproject.toml
|
|
5
|
-
requirements.txt
|
|
6
|
-
arraylib/__init__.py
|
|
7
|
-
arraylib/__main__.py
|
|
8
|
-
arraylib/aliyun/__init__.py
|
|
9
|
-
arraylib/aliyun/aliyun_email.py
|
|
10
|
-
arraylib/aliyun/billing.py
|
|
11
|
-
arraylib/aliyun/content_scanner.py
|
|
12
|
-
arraylib/aliyun/domain.py
|
|
13
|
-
arraylib/aliyun/eci.py
|
|
14
|
-
arraylib/aliyun/ecs.py
|
|
15
|
-
arraylib/aliyun/fc.py
|
|
16
|
-
arraylib/aliyun/oss.py
|
|
17
|
-
arraylib/aliyun/sms.py
|
|
18
|
-
arraylib/aliyun/sts.py
|
|
19
|
-
arraylib/db_utils/mysql.py
|
|
20
|
-
arraylib/db_utils/redis.py
|
|
21
|
-
arraylib/decorators/__init__.py
|
|
22
|
-
arraylib/decorators/decorators.py
|
|
23
|
-
arraylib/gitlab/__init__.py
|
|
24
|
-
arraylib/gitlab/code_analyzer.py
|
|
25
|
-
arraylib/gitlab/pypi_package_manager.py
|
|
26
|
-
arraylib/monitor/__init__.py
|
|
27
|
-
arraylib/monitor/feishu.py
|
|
28
|
-
arraylib/net/request.py
|
|
29
|
-
arraylib/scripts/__init__.py
|
|
30
|
-
arraylib/scripts/collect_code_to_txt.py
|
|
31
|
-
arraylib/scripts/create_test_case_files.py
|
|
32
|
-
arraylib/scripts/nginx_proxy_to_ecs.py
|
|
33
|
-
arraylib/scripts/remove_empty_lines.py
|
|
34
|
-
arraylib/scripts/summary_code_count.py
|
|
35
|
-
arraylib/system/__init__.py
|
|
36
|
-
arraylib/system/common.py
|
|
37
|
-
pixelarraylib.egg-info/PKG-INFO
|
|
38
|
-
pixelarraylib.egg-info/SOURCES.txt
|
|
39
|
-
pixelarraylib.egg-info/dependency_links.txt
|
|
40
|
-
pixelarraylib.egg-info/entry_points.txt
|
|
41
|
-
pixelarraylib.egg-info/requires.txt
|
|
42
|
-
pixelarraylib.egg-info/top_level.txt
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
arraylib
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pixelarraylib-1.0.0/arraylib → pixelarraylib-1.0.2/pixelarraylib}/gitlab/pypi_package_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|