pixelarraylib 1.1.1__tar.gz → 1.1.3__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.1.3/PKG-INFO +209 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/README.md +45 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/__init__.py +1 -1
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/__main__.py +22 -7
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/decorators/decorators.py +38 -2
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/gitlab/code_analyzer.py +44 -32
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/gitlab/pypi_package_manager.py +32 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/monitor/feishu.py +68 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/scripts/__init__.py +4 -2
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/scripts/collect_code_to_txt.py +10 -8
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/scripts/remove_empty_lines.py +7 -5
- pixelarraylib-1.1.3/pixelarraylib/scripts/tson_convert.py +118 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/system/common.py +28 -16
- pixelarraylib-1.1.3/pixelarraylib/system/tson.py +520 -0
- pixelarraylib-1.1.3/pixelarraylib.egg-info/PKG-INFO +209 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib.egg-info/SOURCES.txt +3 -1
- pixelarraylib-1.1.3/pixelarraylib.egg-info/requires.txt +74 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pyproject.toml +59 -5
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/requirements.txt +0 -3
- pixelarraylib-1.1.1/PKG-INFO +0 -121
- pixelarraylib-1.1.1/pixelarraylib.egg-info/PKG-INFO +0 -121
- pixelarraylib-1.1.1/pixelarraylib.egg-info/requires.txt +0 -25
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/LICENSE +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/MANIFEST.in +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/aliyun/__init__.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/aliyun/acr.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/aliyun/aliyun_email.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/aliyun/billing.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/aliyun/content_scanner.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/aliyun/domain.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/aliyun/eci.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/aliyun/ecs.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/aliyun/eip.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/aliyun/fc.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/aliyun/oss.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/aliyun/sms.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/aliyun/sts.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/db_utils/mysql.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/db_utils/redis.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/decorators/__init__.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/gitlab/__init__.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/monitor/__init__.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/net/request.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/scripts/build_website.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/scripts/create_test_case_files.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/scripts/nginx_proxy_to_ecs.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib/system/__init__.py +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib.egg-info/dependency_links.txt +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib.egg-info/entry_points.txt +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/pixelarraylib.egg-info/top_level.txt +0 -0
- {pixelarraylib-1.1.1 → pixelarraylib-1.1.3}/setup.cfg +0 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pixelarraylib
|
|
3
|
+
Version: 1.1.3
|
|
4
|
+
Summary: PixelArray Python开发工具库 - 包含阿里云服务、数据库工具、装饰器、监控等功能
|
|
5
|
+
Author-email: Lu qi <qi.lu@pixelarrayai.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://gitlab.com/pixelarrayai/general_pythondevutils_lib
|
|
8
|
+
Project-URL: Bug Reports, https://gitlab.com/pixelarrayai/general_pythondevutils_lib/-/issues
|
|
9
|
+
Project-URL: Source, https://gitlab.com/pixelarrayai/general_pythondevutils_lib
|
|
10
|
+
Keywords: python,utils,aliyun,database,tools,pixelarray
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
22
|
+
Classifier: Topic :: Utilities
|
|
23
|
+
Requires-Python: >=3.8
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Provides-Extra: aliyun
|
|
27
|
+
Requires-Dist: alibabacloud_tea_util; extra == "aliyun"
|
|
28
|
+
Requires-Dist: alibabacloud_cms20190101; extra == "aliyun"
|
|
29
|
+
Requires-Dist: alibabacloud_green20220302; extra == "aliyun"
|
|
30
|
+
Requires-Dist: alibabacloud_dm20151123; extra == "aliyun"
|
|
31
|
+
Requires-Dist: alibabacloud_fc20230330; extra == "aliyun"
|
|
32
|
+
Requires-Dist: alibabacloud_darabonba_stream; extra == "aliyun"
|
|
33
|
+
Requires-Dist: alibabacloud_dysmsapi20170525; extra == "aliyun"
|
|
34
|
+
Requires-Dist: alibabacloud_sts20150401; extra == "aliyun"
|
|
35
|
+
Requires-Dist: alibabacloud_alidns20150109; extra == "aliyun"
|
|
36
|
+
Requires-Dist: alibabacloud_eci20180808; extra == "aliyun"
|
|
37
|
+
Requires-Dist: alibabacloud_bssopenapi20171214; extra == "aliyun"
|
|
38
|
+
Requires-Dist: alibabacloud_cr20181201; extra == "aliyun"
|
|
39
|
+
Requires-Dist: alibabacloud_vpc20160428; extra == "aliyun"
|
|
40
|
+
Requires-Dist: alibabacloud_tea_openapi; extra == "aliyun"
|
|
41
|
+
Requires-Dist: alibabacloud_credentials; extra == "aliyun"
|
|
42
|
+
Requires-Dist: oss2; extra == "aliyun"
|
|
43
|
+
Requires-Dist: aiohttp; extra == "aliyun"
|
|
44
|
+
Requires-Dist: aiofiles; extra == "aliyun"
|
|
45
|
+
Requires-Dist: requests; extra == "aliyun"
|
|
46
|
+
Provides-Extra: mysql
|
|
47
|
+
Requires-Dist: pymysql; extra == "mysql"
|
|
48
|
+
Requires-Dist: aiomysql; extra == "mysql"
|
|
49
|
+
Requires-Dist: requests; extra == "mysql"
|
|
50
|
+
Provides-Extra: redis
|
|
51
|
+
Requires-Dist: redis; extra == "redis"
|
|
52
|
+
Requires-Dist: requests; extra == "redis"
|
|
53
|
+
Provides-Extra: monitor
|
|
54
|
+
Requires-Dist: requests; extra == "monitor"
|
|
55
|
+
Provides-Extra: net
|
|
56
|
+
Requires-Dist: requests; extra == "net"
|
|
57
|
+
Requires-Dist: aiohttp; extra == "net"
|
|
58
|
+
Provides-Extra: system
|
|
59
|
+
Requires-Dist: cryptography; extra == "system"
|
|
60
|
+
Requires-Dist: paramiko; extra == "system"
|
|
61
|
+
Requires-Dist: requests; extra == "system"
|
|
62
|
+
Provides-Extra: gitlab
|
|
63
|
+
Requires-Dist: requests; extra == "gitlab"
|
|
64
|
+
Requires-Dist: aiohttp; extra == "gitlab"
|
|
65
|
+
Requires-Dist: pandas; extra == "gitlab"
|
|
66
|
+
Provides-Extra: all
|
|
67
|
+
Requires-Dist: alibabacloud_tea_util; extra == "all"
|
|
68
|
+
Requires-Dist: alibabacloud_cms20190101; extra == "all"
|
|
69
|
+
Requires-Dist: alibabacloud_green20220302; extra == "all"
|
|
70
|
+
Requires-Dist: alibabacloud_dm20151123; extra == "all"
|
|
71
|
+
Requires-Dist: alibabacloud_fc20230330; extra == "all"
|
|
72
|
+
Requires-Dist: alibabacloud_darabonba_stream; extra == "all"
|
|
73
|
+
Requires-Dist: alibabacloud_dysmsapi20170525; extra == "all"
|
|
74
|
+
Requires-Dist: alibabacloud_sts20150401; extra == "all"
|
|
75
|
+
Requires-Dist: alibabacloud_alidns20150109; extra == "all"
|
|
76
|
+
Requires-Dist: alibabacloud_eci20180808; extra == "all"
|
|
77
|
+
Requires-Dist: alibabacloud_bssopenapi20171214; extra == "all"
|
|
78
|
+
Requires-Dist: alibabacloud_cr20181201; extra == "all"
|
|
79
|
+
Requires-Dist: alibabacloud_vpc20160428; extra == "all"
|
|
80
|
+
Requires-Dist: alibabacloud_tea_openapi; extra == "all"
|
|
81
|
+
Requires-Dist: alibabacloud_credentials; extra == "all"
|
|
82
|
+
Requires-Dist: oss2; extra == "all"
|
|
83
|
+
Requires-Dist: pymysql; extra == "all"
|
|
84
|
+
Requires-Dist: aiomysql; extra == "all"
|
|
85
|
+
Requires-Dist: redis; extra == "all"
|
|
86
|
+
Requires-Dist: cryptography; extra == "all"
|
|
87
|
+
Requires-Dist: paramiko; extra == "all"
|
|
88
|
+
Requires-Dist: requests; extra == "all"
|
|
89
|
+
Requires-Dist: aiohttp; extra == "all"
|
|
90
|
+
Requires-Dist: aiofiles; extra == "all"
|
|
91
|
+
Requires-Dist: pandas; extra == "all"
|
|
92
|
+
Dynamic: license-file
|
|
93
|
+
|
|
94
|
+
# PixelArrayLib - PixelArray Python开发工具库
|
|
95
|
+
|
|
96
|
+
PixelArrayLib是一个功能丰富的Python开发工具库,包含阿里云服务、数据库工具、装饰器、监控等功能,同时提供便捷的命令行工具。
|
|
97
|
+
|
|
98
|
+
## 安装
|
|
99
|
+
|
|
100
|
+
### 基础安装
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
pip install pixelarraylib
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 可选依赖安装
|
|
107
|
+
|
|
108
|
+
为了避免安装不必要的依赖,你可以按需安装特定模块的依赖:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# 只安装阿里云服务相关依赖
|
|
112
|
+
pip install pixelarraylib[aliyun]
|
|
113
|
+
|
|
114
|
+
# 只安装MySQL工具相关依赖
|
|
115
|
+
pip install pixelarraylib[mysql]
|
|
116
|
+
|
|
117
|
+
# 只安装Redis工具相关依赖
|
|
118
|
+
pip install pixelarraylib[redis]
|
|
119
|
+
|
|
120
|
+
# 只安装监控工具相关依赖
|
|
121
|
+
pip install pixelarraylib[monitor]
|
|
122
|
+
|
|
123
|
+
# 只安装网络工具相关依赖
|
|
124
|
+
pip install pixelarraylib[net]
|
|
125
|
+
|
|
126
|
+
# 只安装系统工具相关依赖
|
|
127
|
+
pip install pixelarraylib[system]
|
|
128
|
+
|
|
129
|
+
# 只安装GitLab工具相关依赖
|
|
130
|
+
pip install pixelarraylib[gitlab]
|
|
131
|
+
|
|
132
|
+
# 安装所有可选依赖
|
|
133
|
+
pip install pixelarraylib[all]
|
|
134
|
+
|
|
135
|
+
# 组合安装多个模块
|
|
136
|
+
pip install pixelarraylib[mysql,redis]
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**可选依赖说明:**
|
|
140
|
+
- `aliyun`: 阿里云服务集成(OSS、SMS、FC、DM、ECS、ECI等)
|
|
141
|
+
- `mysql`: MySQL数据库工具(pymysql、aiomysql)
|
|
142
|
+
- `redis`: Redis数据库工具
|
|
143
|
+
- `monitor`: 监控告警工具(飞书通知等)
|
|
144
|
+
- `net`: 网络请求工具
|
|
145
|
+
- `system`: 系统工具(加密、SSH等)
|
|
146
|
+
- `gitlab`: GitLab工具(PyPI包管理、代码分析等)
|
|
147
|
+
- `all`: 所有可选依赖
|
|
148
|
+
|
|
149
|
+
## 使用方法
|
|
150
|
+
|
|
151
|
+
### 1. Python程序中使用
|
|
152
|
+
|
|
153
|
+
```python
|
|
154
|
+
# 导入pixelarraylib模块
|
|
155
|
+
import pixelarraylib
|
|
156
|
+
|
|
157
|
+
# 使用各种功能模块
|
|
158
|
+
from pixelarraylib.aliyun import some_service
|
|
159
|
+
from pixelarraylib.db_utils import database_tools
|
|
160
|
+
from pixelarraylib.decorators import useful_decorators
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### 2. 命令行工具使用
|
|
164
|
+
|
|
165
|
+
安装后,你可以在命令行中直接使用 `pixelarraylib` 命令:
|
|
166
|
+
|
|
167
|
+
#### 创建测试用例文件
|
|
168
|
+
```bash
|
|
169
|
+
# 一键创建所有测试用例文件
|
|
170
|
+
pixelarraylib create_test_case_files
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## 功能特性
|
|
174
|
+
|
|
175
|
+
- **阿里云服务集成**: 包含CMS、Green、DM、FC、SMS、STS等服务
|
|
176
|
+
- **数据库工具**: MySQL、Redis等数据库操作工具
|
|
177
|
+
- **Web框架**: FastAPI集成
|
|
178
|
+
- **实用工具**: 二维码生成、加密解密、XML处理等
|
|
179
|
+
- **命令行工具**: 测试用例生成、代码统计等实用脚本
|
|
180
|
+
|
|
181
|
+
## 开发
|
|
182
|
+
|
|
183
|
+
### 本地开发安装
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# 克隆仓库
|
|
187
|
+
git clone https://gitlab.com/pixelarrayai/general_pythondevutils_lib.git
|
|
188
|
+
cd general_pythondevutils_lib
|
|
189
|
+
|
|
190
|
+
# 安装开发依赖
|
|
191
|
+
pip install -e .
|
|
192
|
+
|
|
193
|
+
# 测试命令行工具
|
|
194
|
+
pixelarraylib --help
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### 添加新的命令行工具
|
|
198
|
+
|
|
199
|
+
1. 在 `pixelarraylib/scripts/` 目录下创建新的脚本文件
|
|
200
|
+
2. 在 `pixelarraylib/__main__.py` 中添加新的命令选项
|
|
201
|
+
3. 更新 `pixelarraylib/scripts/__init__.py` 导出新功能
|
|
202
|
+
|
|
203
|
+
## 许可证
|
|
204
|
+
|
|
205
|
+
MIT License
|
|
206
|
+
|
|
207
|
+
## 作者
|
|
208
|
+
|
|
209
|
+
Lu qi (qi.lu@pixelarrayai.com)
|
|
@@ -4,10 +4,55 @@ PixelArrayLib是一个功能丰富的Python开发工具库,包含阿里云服
|
|
|
4
4
|
|
|
5
5
|
## 安装
|
|
6
6
|
|
|
7
|
+
### 基础安装
|
|
8
|
+
|
|
7
9
|
```bash
|
|
8
10
|
pip install pixelarraylib
|
|
9
11
|
```
|
|
10
12
|
|
|
13
|
+
### 可选依赖安装
|
|
14
|
+
|
|
15
|
+
为了避免安装不必要的依赖,你可以按需安装特定模块的依赖:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# 只安装阿里云服务相关依赖
|
|
19
|
+
pip install pixelarraylib[aliyun]
|
|
20
|
+
|
|
21
|
+
# 只安装MySQL工具相关依赖
|
|
22
|
+
pip install pixelarraylib[mysql]
|
|
23
|
+
|
|
24
|
+
# 只安装Redis工具相关依赖
|
|
25
|
+
pip install pixelarraylib[redis]
|
|
26
|
+
|
|
27
|
+
# 只安装监控工具相关依赖
|
|
28
|
+
pip install pixelarraylib[monitor]
|
|
29
|
+
|
|
30
|
+
# 只安装网络工具相关依赖
|
|
31
|
+
pip install pixelarraylib[net]
|
|
32
|
+
|
|
33
|
+
# 只安装系统工具相关依赖
|
|
34
|
+
pip install pixelarraylib[system]
|
|
35
|
+
|
|
36
|
+
# 只安装GitLab工具相关依赖
|
|
37
|
+
pip install pixelarraylib[gitlab]
|
|
38
|
+
|
|
39
|
+
# 安装所有可选依赖
|
|
40
|
+
pip install pixelarraylib[all]
|
|
41
|
+
|
|
42
|
+
# 组合安装多个模块
|
|
43
|
+
pip install pixelarraylib[mysql,redis]
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**可选依赖说明:**
|
|
47
|
+
- `aliyun`: 阿里云服务集成(OSS、SMS、FC、DM、ECS、ECI等)
|
|
48
|
+
- `mysql`: MySQL数据库工具(pymysql、aiomysql)
|
|
49
|
+
- `redis`: Redis数据库工具
|
|
50
|
+
- `monitor`: 监控告警工具(飞书通知等)
|
|
51
|
+
- `net`: 网络请求工具
|
|
52
|
+
- `system`: 系统工具(加密、SSH等)
|
|
53
|
+
- `gitlab`: GitLab工具(PyPI包管理、代码分析等)
|
|
54
|
+
- `all`: 所有可选依赖
|
|
55
|
+
|
|
11
56
|
## 使用方法
|
|
12
57
|
|
|
13
58
|
### 1. Python程序中使用
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""
|
|
3
|
-
|
|
3
|
+
PixelArrayLib 命令行工具入口点
|
|
4
4
|
支持的命令:
|
|
5
5
|
- pixelarraylib create_test_case_files
|
|
6
6
|
- pixelarraylib collect_code_to_txt [options]
|
|
7
7
|
- pixelarraylib nginx_proxy_to_ecs [options]
|
|
8
8
|
- pixelarraylib remove_empty_lines <input_file> [output_file]
|
|
9
9
|
- pixelarraylib build_website
|
|
10
|
+
- pixelarraylib tson_convert [options]
|
|
10
11
|
"""
|
|
11
12
|
|
|
12
13
|
import sys
|
|
@@ -17,7 +18,7 @@ def main():
|
|
|
17
18
|
# 检查是否有子命令
|
|
18
19
|
if len(sys.argv) < 2:
|
|
19
20
|
parser = argparse.ArgumentParser(
|
|
20
|
-
description="
|
|
21
|
+
description="PixelArrayLib 命令行工具",
|
|
21
22
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
22
23
|
epilog="""
|
|
23
24
|
示例用法:
|
|
@@ -26,6 +27,7 @@ def main():
|
|
|
26
27
|
pixelarraylib nginx_proxy_to_ecs --help # 查看Nginx反向代理到ECS工具帮助
|
|
27
28
|
pixelarraylib remove_empty_lines --help # 查看去除空行工具帮助
|
|
28
29
|
pixelarraylib build_website --help # 查看一键构建网站工具帮助
|
|
30
|
+
pixelarraylib tson_convert --help # 查看TSON转换工具帮助
|
|
29
31
|
""",
|
|
30
32
|
)
|
|
31
33
|
parser.print_help()
|
|
@@ -50,7 +52,7 @@ def main():
|
|
|
50
52
|
try:
|
|
51
53
|
from pixelarraylib.scripts.collect_code_to_txt import main as collect_main
|
|
52
54
|
|
|
53
|
-
# 修改sys.argv,移除第一个参数(
|
|
55
|
+
# 修改sys.argv,移除第一个参数(pixelarraylib),让collect_code_to_txt正确处理参数
|
|
54
56
|
original_argv = sys.argv
|
|
55
57
|
sys.argv = [original_argv[0]] + original_argv[2:]
|
|
56
58
|
collect_main()
|
|
@@ -66,7 +68,7 @@ def main():
|
|
|
66
68
|
main as nginx_proxy_to_ecs,
|
|
67
69
|
)
|
|
68
70
|
|
|
69
|
-
# 修改sys.argv,移除第一个参数(
|
|
71
|
+
# 修改sys.argv,移除第一个参数(pixelarraylib),让nginx_proxy_to_ecs正确处理参数
|
|
70
72
|
original_argv = sys.argv
|
|
71
73
|
sys.argv = [original_argv[0]] + original_argv[2:]
|
|
72
74
|
nginx_proxy_to_ecs()
|
|
@@ -82,7 +84,7 @@ def main():
|
|
|
82
84
|
main as remove_empty_lines_main,
|
|
83
85
|
)
|
|
84
86
|
|
|
85
|
-
# 修改sys.argv,移除第一个参数(
|
|
87
|
+
# 修改sys.argv,移除第一个参数(pixelarraylib),让remove_empty_lines正确处理参数
|
|
86
88
|
original_argv = sys.argv
|
|
87
89
|
sys.argv = [original_argv[0]] + original_argv[2:]
|
|
88
90
|
remove_empty_lines_main()
|
|
@@ -103,9 +105,21 @@ def main():
|
|
|
103
105
|
print(f"错误:无法导入 build_website 模块: {e}")
|
|
104
106
|
sys.exit(1)
|
|
105
107
|
|
|
108
|
+
elif command == "tson_convert":
|
|
109
|
+
# 导入并执行TSON转换功能
|
|
110
|
+
try:
|
|
111
|
+
from pixelarraylib.scripts.tson_convert import main as tson_convert_main
|
|
112
|
+
original_argv = sys.argv
|
|
113
|
+
sys.argv = [original_argv[0]] + original_argv[2:]
|
|
114
|
+
tson_convert_main()
|
|
115
|
+
sys.argv = original_argv
|
|
116
|
+
except ImportError as e:
|
|
117
|
+
print(f"错误:无法导入 tson_convert 模块: {e}")
|
|
118
|
+
sys.exit(1)
|
|
119
|
+
|
|
106
120
|
elif command in ["-h", "--help"]:
|
|
107
121
|
parser = argparse.ArgumentParser(
|
|
108
|
-
description="
|
|
122
|
+
description="PixelArrayLib 命令行工具",
|
|
109
123
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
110
124
|
epilog="""
|
|
111
125
|
示例用法:
|
|
@@ -114,13 +128,14 @@ def main():
|
|
|
114
128
|
pixelarraylib nginx_proxy_to_ecs --help # 查看Nginx反向代理到ECS工具帮助
|
|
115
129
|
pixelarraylib remove_empty_lines --help # 查看去除空行工具帮助
|
|
116
130
|
pixelarraylib build_website --help # 查看一键构建网站工具帮助
|
|
131
|
+
pixelarraylib tson_convert --help # 查看TSON转换工具帮助
|
|
117
132
|
""",
|
|
118
133
|
)
|
|
119
134
|
parser.print_help()
|
|
120
135
|
else:
|
|
121
136
|
print(f"错误:未知命令 '{command}'")
|
|
122
137
|
print(
|
|
123
|
-
"可用命令:create_test_case_files, collect_code_to_txt, nginx_proxy_to_ecs, remove_empty_lines, build_website"
|
|
138
|
+
"可用命令:create_test_case_files, collect_code_to_txt, nginx_proxy_to_ecs, remove_empty_lines, build_website, tson_convert"
|
|
124
139
|
)
|
|
125
140
|
print("使用 'pixelarraylib --help' 查看帮助")
|
|
126
141
|
sys.exit(1)
|
|
@@ -18,6 +18,17 @@ def catch_exception(
|
|
|
18
18
|
addtional_alert: str = "",
|
|
19
19
|
alert_channel: str = "devtoolkit服务报警",
|
|
20
20
|
):
|
|
21
|
+
"""
|
|
22
|
+
description:
|
|
23
|
+
异常捕获装饰器,当函数执行失败时发送飞书告警
|
|
24
|
+
parameters:
|
|
25
|
+
exception_return(Any): 异常时返回的默认值
|
|
26
|
+
alert_params(bool): 是否在告警中包含函数参数
|
|
27
|
+
addtional_alert(str): 额外的告警信息
|
|
28
|
+
alert_channel(str): 飞书告警频道名称
|
|
29
|
+
return:
|
|
30
|
+
decorator(Callable): 装饰器函数
|
|
31
|
+
"""
|
|
21
32
|
feishu_alert = Feishu(alert_channel)
|
|
22
33
|
def get_caller_function_name():
|
|
23
34
|
"""
|
|
@@ -38,7 +49,7 @@ def catch_exception(
|
|
|
38
49
|
alert_message = f"文件{os.path.relpath(inspect.getfile(func))}中的函数{get_caller_function_name()}执行失败,{alert_params_str},错误信息如下:\n {traceback.format_exc()}"
|
|
39
50
|
if addtional_alert:
|
|
40
51
|
alert_message += f"\n{addtional_alert}"
|
|
41
|
-
|
|
52
|
+
feishu_alert.send(alert_message)
|
|
42
53
|
return exception_return
|
|
43
54
|
|
|
44
55
|
@wraps(func)
|
|
@@ -50,7 +61,7 @@ def catch_exception(
|
|
|
50
61
|
alert_message = f"文件{os.path.relpath(inspect.getfile(func))}中的函数{get_caller_function_name()}执行失败,{alert_params_str},错误信息如下:\n {traceback.format_exc()}"
|
|
51
62
|
if addtional_alert:
|
|
52
63
|
alert_message += f"\n{addtional_alert}"
|
|
53
|
-
|
|
64
|
+
await feishu_alert.send_async(alert_message)
|
|
54
65
|
return exception_return
|
|
55
66
|
|
|
56
67
|
if asyncio.iscoroutinefunction(func):
|
|
@@ -65,6 +76,15 @@ def with_retry(
|
|
|
65
76
|
retry_times: int = 3,
|
|
66
77
|
retry_interval: int = 1,
|
|
67
78
|
) -> Callable:
|
|
79
|
+
"""
|
|
80
|
+
description:
|
|
81
|
+
重试装饰器,当函数执行失败时自动重试
|
|
82
|
+
parameters:
|
|
83
|
+
retry_times(int): 重试次数,默认为3
|
|
84
|
+
retry_interval(int): 重试间隔时间(秒),默认为1
|
|
85
|
+
return:
|
|
86
|
+
decorator(Callable): 装饰器函数
|
|
87
|
+
"""
|
|
68
88
|
def decorator(func: Callable) -> Callable:
|
|
69
89
|
@functools.wraps(func)
|
|
70
90
|
def wrapper(*args, **kwargs) -> Any:
|
|
@@ -85,6 +105,14 @@ def with_retry(
|
|
|
85
105
|
|
|
86
106
|
|
|
87
107
|
def with_timeout(seconds):
|
|
108
|
+
"""
|
|
109
|
+
description:
|
|
110
|
+
超时装饰器,限制函数执行时间
|
|
111
|
+
parameters:
|
|
112
|
+
seconds(int): 超时时间(秒)
|
|
113
|
+
return:
|
|
114
|
+
decorator(Callable): 装饰器函数
|
|
115
|
+
"""
|
|
88
116
|
def decorator(func):
|
|
89
117
|
@wraps(func)
|
|
90
118
|
def wrapper(*args, **kwargs):
|
|
@@ -103,6 +131,14 @@ def with_timeout(seconds):
|
|
|
103
131
|
|
|
104
132
|
|
|
105
133
|
def avoid_chinese_filename(func):
|
|
134
|
+
"""
|
|
135
|
+
description:
|
|
136
|
+
避免中文文件名的装饰器,自动处理包含中文的文件路径
|
|
137
|
+
parameters:
|
|
138
|
+
func(Callable): 被装饰的函数
|
|
139
|
+
return:
|
|
140
|
+
wrapper(Callable): 包装后的函数
|
|
141
|
+
"""
|
|
106
142
|
def contains_chinese(text):
|
|
107
143
|
if not text:
|
|
108
144
|
return False
|
|
@@ -34,11 +34,14 @@ class GitLabCodeAnalyzer:
|
|
|
34
34
|
self.session = None
|
|
35
35
|
|
|
36
36
|
async def get_project_id_name_list(self, group_id=None, owned_only=True):
|
|
37
|
-
"""
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
"""
|
|
38
|
+
description:
|
|
39
|
+
获取项目的 ID 和名称列表
|
|
40
|
+
parameters:
|
|
41
|
+
group_id(int): 组ID,如果指定则只获取该组的项目
|
|
42
|
+
owned_only(bool): 是否只获取用户拥有的项目,默认为True以提高速度
|
|
43
|
+
return:
|
|
44
|
+
project_list(list): 项目列表,每个元素为(id, name)元组
|
|
42
45
|
"""
|
|
43
46
|
projects = await self.get_all_projects(
|
|
44
47
|
group_id, owned_only=owned_only, membership_only=True
|
|
@@ -48,12 +51,15 @@ class GitLabCodeAnalyzer:
|
|
|
48
51
|
async def get_all_projects(
|
|
49
52
|
self, group_id=None, owned_only=True, membership_only=True
|
|
50
53
|
):
|
|
51
|
-
"""
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
"""
|
|
55
|
+
description:
|
|
56
|
+
获取项目列表
|
|
57
|
+
parameters:
|
|
58
|
+
group_id(int): 组ID,如果指定则只获取该组的项目
|
|
59
|
+
owned_only(bool): 是否只获取用户拥有的项目
|
|
60
|
+
membership_only(bool): 是否只获取用户有权限的项目
|
|
61
|
+
return:
|
|
62
|
+
projects(list): 项目列表
|
|
57
63
|
"""
|
|
58
64
|
if group_id:
|
|
59
65
|
url = f"{self.gitlab_url}/api/v4/groups/{group_id}/projects"
|
|
@@ -107,12 +113,15 @@ class GitLabCodeAnalyzer:
|
|
|
107
113
|
return projects
|
|
108
114
|
|
|
109
115
|
async def get_project_code_stats(self, project_id, since=None, until=None):
|
|
110
|
-
"""
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
+
"""
|
|
117
|
+
description:
|
|
118
|
+
获取项目的代码统计,包括每个贡献者的提交数和代码行数变化
|
|
119
|
+
parameters:
|
|
120
|
+
project_id(int): 项目ID
|
|
121
|
+
since(str): 开始日期,格式为YYYY-MM-DD
|
|
122
|
+
until(str): 结束日期,格式为YYYY-MM-DD
|
|
123
|
+
return:
|
|
124
|
+
stats(dict): 代码统计信息
|
|
116
125
|
"""
|
|
117
126
|
session = await self._get_session()
|
|
118
127
|
|
|
@@ -257,12 +266,15 @@ class GitLabCodeAnalyzer:
|
|
|
257
266
|
return None
|
|
258
267
|
|
|
259
268
|
async def generate_code_report(self, group_id=None, since=None, until=None):
|
|
260
|
-
"""
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
269
|
+
"""
|
|
270
|
+
description:
|
|
271
|
+
生成代码统计报告
|
|
272
|
+
parameters:
|
|
273
|
+
group_id(int): 组ID,如果指定则只获取该组的项目
|
|
274
|
+
since(str): 开始日期,格式为YYYY-MM-DD
|
|
275
|
+
until(str): 结束日期,格式为YYYY-MM-DD
|
|
276
|
+
return:
|
|
277
|
+
report_data(list): 代码统计报告数据
|
|
266
278
|
"""
|
|
267
279
|
projects = await self.get_all_projects(group_id)
|
|
268
280
|
report_data = []
|
|
@@ -316,15 +328,15 @@ class GitLabCodeAnalyzer:
|
|
|
316
328
|
return project_data
|
|
317
329
|
|
|
318
330
|
async def get_commit_details_report(self, project_id, since=None, until=None):
|
|
319
|
-
"""
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
List[Dict]: 包含所有提交详细信息的列表
|
|
331
|
+
"""
|
|
332
|
+
description:
|
|
333
|
+
获取详细的提交信息报告
|
|
334
|
+
parameters:
|
|
335
|
+
project_id(int): 项目ID
|
|
336
|
+
since(str): 开始日期,格式为YYYY-MM-DD
|
|
337
|
+
until(str): 结束日期,格式为YYYY-MM-DD
|
|
338
|
+
return:
|
|
339
|
+
commits(List[Dict]): 包含所有提交详细信息的列表
|
|
328
340
|
"""
|
|
329
341
|
contributors = await self.get_project_code_stats(
|
|
330
342
|
project_id, since=since, until=until
|
|
@@ -15,6 +15,15 @@ class GitLabPyPIPackageManager:
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
def _find_package_id(self, package_name: str, package_version: str) -> str:
|
|
18
|
+
"""
|
|
19
|
+
description:
|
|
20
|
+
查找包的ID
|
|
21
|
+
parameters:
|
|
22
|
+
package_name(str): 包名
|
|
23
|
+
package_version(str): 包版本
|
|
24
|
+
return:
|
|
25
|
+
str: 包ID
|
|
26
|
+
"""
|
|
18
27
|
url = f"{self.base_url}/packages"
|
|
19
28
|
params = {
|
|
20
29
|
"package_type": "pypi",
|
|
@@ -32,6 +41,12 @@ class GitLabPyPIPackageManager:
|
|
|
32
41
|
return None
|
|
33
42
|
|
|
34
43
|
def list_packages(self) -> List[str]:
|
|
44
|
+
"""
|
|
45
|
+
description:
|
|
46
|
+
列出所有包
|
|
47
|
+
return:
|
|
48
|
+
List[str]: 包列表
|
|
49
|
+
"""
|
|
35
50
|
url = f"{self.base_url}/packages"
|
|
36
51
|
params = {"package_type": "pypi"}
|
|
37
52
|
response = requests.get(url, headers=self.headers, params=params)
|
|
@@ -41,6 +56,14 @@ class GitLabPyPIPackageManager:
|
|
|
41
56
|
return []
|
|
42
57
|
|
|
43
58
|
def list_package_versions(self, package_name: str) -> List[str]:
|
|
59
|
+
"""
|
|
60
|
+
description:
|
|
61
|
+
列出包的版本
|
|
62
|
+
parameters:
|
|
63
|
+
package_name(str): 包名
|
|
64
|
+
return:
|
|
65
|
+
List[str]: 包版本列表
|
|
66
|
+
"""
|
|
44
67
|
url = f"{self.base_url}/packages"
|
|
45
68
|
params = {"package_type": "pypi", "package_name": package_name}
|
|
46
69
|
response = requests.get(url, headers=self.headers, params=params)
|
|
@@ -50,6 +73,15 @@ class GitLabPyPIPackageManager:
|
|
|
50
73
|
return []
|
|
51
74
|
|
|
52
75
|
def delete_package(self, package_name: str, package_version: str):
|
|
76
|
+
"""
|
|
77
|
+
description:
|
|
78
|
+
删除包
|
|
79
|
+
parameters:
|
|
80
|
+
package_name(str): 包名
|
|
81
|
+
package_version(str): 包版本
|
|
82
|
+
return:
|
|
83
|
+
bool: 是否删除成功
|
|
84
|
+
"""
|
|
53
85
|
package_id = self._find_package_id(package_name, package_version)
|
|
54
86
|
if package_id is None:
|
|
55
87
|
raise ValueError(f"Package {package_name} {package_version} not found")
|