-
Notifications
You must be signed in to change notification settings - Fork 4
/
zentao_restful.py
executable file
·309 lines (281 loc) · 9.52 KB
/
zentao_restful.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
import json
import os
import time
import httpx
# get env ZENTAO_HOST, if not exist, set localhost
ZENTAO_HOST = os.getenv('ZENTAO_HOST', 'localhost')
ZENTAO_USER = os.getenv('ZENTAO_USER', 'admin')
ZENTAO_PASSWORD = os.getenv('ZENTAO_PASSWORD', '123456')
API_URL = 'zentao/api.php/v1'
DEBUG = True
TOKEN = None
print(f'ZENTAO_HOST: {ZENTAO_HOST}')
# class ZenTao:
def print_response(response):
if response.status_code == 200 or response.status_code == 201:
print('code:', response.status_code, 'succeed:', response.json())
else:
print('code:', response.status_code, 'failed:',
json.loads(response.text).get('error'))
def get_tokens():
"""
get tokens
api: /tokens
request method: POST
request body:
名称 类型 必填 描述
account string 否 登录名
password string 否 密码
response: { token: str }
"""
global TOKEN
data = {'account': ZENTAO_USER, 'password': ZENTAO_PASSWORD}
url = f'http://{ZENTAO_HOST}/{API_URL}/tokens'
if DEBUG:
print('url:', url, 'request body:', data)
response = httpx.post(url, json=data)
if response.status_code == 200 or response.status_code == 201:
TOKEN = response.json().get('token')
print_response(response)
def get_user_myself():
"""
get user myself info
api: /user
request method: GET
request header: { Token: str }
response:
名称 类型 必填 描述
profile object 是
- id int 是 用户编号
- type string 是 类型(inside 内部用户 | outside 外部用户)
- dept int 是 所属部门
- account string 是 用户名
- realname string 是 真实姓名
- nickname string 否 昵称
- avatar string 否 头像
- birthday date 否 生日
- gender string 否 性别(f 女性 | m 男性)
- mobile string 否 手机号码
- phone string 否 电话号码
- weixin string 否 微信号码
- address string 否 住址
- join date 否 加入日期
- admin boolean 是 是否管理员
"""
global TOKEN
if TOKEN is None:
get_tokens()
if TOKEN is None:
return
headers = {'Token': TOKEN}
url = f'http://{ZENTAO_HOST}/{API_URL}/user'
if DEBUG:
print('url:', url, 'request header:', headers)
response = httpx.get(url, headers=headers)
print_response(response)
def get_user(user_id: int):
"""
get user info
api: /users/{id}
request method: GET
request header: { Token: str }
response:
名称 类型 必填 描述
id int 是 用户编号
type string 是 类型(inside 内部用户 | outside 外部用户)
dept int 是 所属部门
account string 是 用户名
role string 是 角色
realname string 是 真实姓名
nickname string 否 昵称
avatar string 否 头像
birthday date 否 生日
gender string 否 性别(f 女性 | m 男性)
email string 否 邮箱
mobile string 否 手机号
phone string 否 电话号
weixin string 否 微信号
join date 否 加入日期
"""
global TOKEN
if TOKEN is None:
get_tokens()
if TOKEN is None:
return
headers = {'Token': TOKEN}
url = f'http://{ZENTAO_HOST}/{API_URL}/users/{user_id}'
if DEBUG:
print('url:', url, 'request header:', headers)
response = httpx.get(url, headers=headers)
print_response(response)
def get_products():
"""
get products
api: /products
request method: GET
request header: { Token: str }
response: { products: object }
"""
global TOKEN
if TOKEN is None:
get_tokens()
if TOKEN is None:
return
headers = {'Token': TOKEN}
url = f'http://{ZENTAO_HOST}/{API_URL}/products'
if DEBUG:
print('url:', url, 'request header:', headers)
response = httpx.get(url, headers=headers)
print_response(response)
def get_project_builds(project_id: int):
"""
get builds
api: /projects/{id}/builds
request method: GET
request header: { Token: str }
response:
名称 类型 必填 描述
total int 是 版本总数
builds array 是 版本列表
- id int 是 版本ID
- project int 是 所属项目
- product int 是 所属产品
- branch int 是 所属分支
- execution int 是 所属执行
- name string 是 版本名称
- scmPath string 否 源代码地址
- filePath string 否 下载地址
- date date 是 打包日期
- builder user 是 构建者
- desc string 是 版本描述
"""
global TOKEN
if TOKEN is None:
get_tokens()
if TOKEN is None:
return
headers = {'Token': TOKEN}
url = f'http://{ZENTAO_HOST}/{API_URL}/projects/{project_id}/builds'
if DEBUG:
print('url:', url, 'request header:', headers)
response = httpx.get(url, headers=headers)
print_response(response)
def get_execution_builds(execution_id: int):
"""
get builds
api: /executions/{id}/builds
request method: GET
request header: { Token: str }
response:
名称 类型 必填 描述
total int 是 版本总数
builds array 是 版本列表
- id int 是 版本ID
- project int 是 所属项目
- product int 是 所属产品
- branch int 是 所属分支
- execution int 是 所属执行
- name string 是 版本名称
- scmPath string 否 源代码地址
- filePath string 否 下载地址
- date date 是 打包日期
- builder user 是 构建者
- desc string 是 版本描述
"""
global TOKEN
if TOKEN is None:
get_tokens()
if TOKEN is None:
return
headers = {'Token': TOKEN}
url = f'http://{ZENTAO_HOST}/{API_URL}/executions/{execution_id}/builds'
if DEBUG:
print('url:', url, 'request header:', headers)
response = httpx.get(url, headers=headers)
print_response(response)
def get_build(build_id: int):
"""
get build
api: /builds/{id}
request method: GET
request header: { Token: str }
response:
名称 类型 必填 描述
id int 是 版本ID
project int 是 所属项目
product int 是 所属产品
branch int 是 所属产品分支(主分支为0)
execution int 是 所属执行
name string 是 版本名称
scmPath string 是 源代码地址
filePath string 是 下载地址
desc string 是 版本描述
builder user 是 构建者
date date 是 打包日期
"""
global TOKEN
if TOKEN is None:
get_tokens()
if TOKEN is None:
return
headers = {'Token': TOKEN}
url = f'http://{ZENTAO_HOST}/{API_URL}/builds/{build_id}'
if DEBUG:
print('url:', url, 'request header:', headers)
response = httpx.get(url, headers=headers)
print_response(response)
def create_build(project_id: int, product_id: int, name : str, builder : str, date : str,
filePath : str, desc : str):
"""
create build
api: /projects/{id}/builds
request method: POST
request header: { Token: str }
request body:
名称 类型 必填 描述
execution int 是 所属执行
product int 是 所属产品
branch int 否 所属分支
name string 是 版本名称
builder string 是 构建者
date date 否 打包日期
scmPath string 否 源代码地址
filePath string 否 下载地址
desc string 否 版本描述
response:
名称 类型 必填 描述
id int 是 版本ID
project int 是 所属项目
product int 是 所属产品
branch int 是 所属产品分支(主分支为0)
execution int 是 所属执行
name string 是 版本名称
scmPath string 是 源代码地址
filePath string 是 下载地址
desc string 是 版本描述
builder user 是 构建者
date date 是 打包日期
"""
global TOKEN
if TOKEN is None:
get_tokens()
if TOKEN is None:
return
headers = {'Token': TOKEN}
data = {'execution': 0, 'product': product_id, 'branch': 0, 'name': name, 'builder': builder,
'date': date, 'scmPath': '', 'filePath': filePath, 'desc': desc}
url = f'http://{ZENTAO_HOST}/{API_URL}/projects/{project_id}/builds'
if DEBUG:
print('url:', url, 'request header:', headers, 'request body:', data)
response = httpx.post(url, headers=headers, json=data)
print_response(response)
if __name__ == '__main__':
# get_tokens()
# get_user_myself()
# get_user(4)
# get_products()
get_build(2)
create_build(3, 4, 'test', 'admin', time.strftime("%Y-%m-%d", time.localtime()),
'http://www.baidu.com', 'test')