代码上线前,往往要降级 api
的版本号。但每次都去 nexus
上手动查问最新的版本号,也是挺麻烦的。
仍然是为了更高效的摸鱼,写了一个 python
脚本,用于查问指定 api
的最大版本号。
# 引入第三方库 requests
import requests
import re
import math
import json
ARTIFACT_ID = 'one-api'
GROUP_ID = 'com.one'
NEXUS_URL = 'http://repo.one.com/service/extdirect'
NEXUS_COOKIE = 'onetwothree'
def main():
# 从 nexus 获取指定我的项目的所有版本号
version_list = __get_version_list(ARTIFACT_ID, GROUP_ID, NEXUS_URL, NEXUS_COOKIE)
# 计算出最大的版本号
max_version = __get_max_version(version_list)
print('最新的版本号 >>>' + max_version)
# 从汇合中,查找出最大的版本号
def __get_max_version(version_list):
# 初始值设为 0.0.0
# 数据格式为 ('残缺的版本号',主版本号, 次版本号, 小版本号)
max_version_tup = ('0.0.0', 0, 0, 0)
for current_version in version_list:
# 对于形如 1.1.0-SNAPSHOT 的版本号,转换成 1.1.0
temp_version = re.sub('-.*', '', current_version)
num_list = temp_version.split('.')
current_version_tup = [current_version, int(num_list[0]), int(num_list[1]), int(num_list[2])]
# 与上一次记录的最大版本号比拟,取二者最大值,作为最新的最大版本号
max_version_tup = __get_max_version_tup(max_version_tup, current_version_tup)
return max_version_tup[0]
# 比拟两个版本号,返回其中的最大者
def __get_max_version_tup(tup_a, tup_b):
# 顺次比拟 3 个版本号
if tup_a[1] > tup_b[1]:
return tup_a
if tup_a[1] < tup_b[1]:
return tup_b
if tup_a[2] > tup_b[2]:
return tup_a
if tup_a[2] < tup_b[2]:
return tup_b
if tup_a[3] > tup_b[3]:
return tup_a
if tup_a[3] < tup_b[3]:
return tup_b
return tup_a
# 查问指定我的项目的所有版本号
def __get_version_list(artifact_id, group_id, url, cookie):
# 设置分页查问的参数
page_index = 1
page_size = 300
request_dist = __build_request_dist(artifact_id, group_id, page_index, page_size)
response = __post_json(request_dist, url, cookie)
# 获取版本号的总数量、版本号列表
total = __get_total(response)
version_list = []
# 从响应参数中,提取出所有版本号,并追加至数组
__fill_version(version_list, response)
# 计算残余的循环次数
# 即,向上取整(总数 / 页大小)-1
circulation_num = math.ceil(total / page_size) - 1
while circulation_num > 0:
# 循环分页查问版本号
circulation_num -= 1
page_index += 1
request_dist = __build_request_dist(artifact_id, group_id, page_index, page_size)
response = __post_json(request_dist, url, cookie)
# 从响应参数中,提取出所有版本号,并追加至数组
__fill_version(version_list, response)
return version_list
# 获取版本号的总数量
def __get_total(response):
response = json.loads(response)
result = response["result"]
total = result["total"]
return total
# 从响应参数中,提取出所有版本号,并追加至数组
def __fill_version(version_list, response):
response = json.loads(response)
result = response["result"]
data = result["data"]
for i in data:
version_list.append(i['version'])
return version_list
# 构建申请参数
def __build_request_dist(artifact_id, group_id, page_index, page_size):
# 设置起始值
start = (page_index - 1) * page_size
# 查问参数
request_dist = {
'action': 'coreui_Search',
'method': 'read',
'data': [
{
'page': page_index,
'start': start,
'limit': page_size,
'filter': [
# 以 maven 的格局搜寻
{
'property': 'format',
'value': 'maven2'
},
{
'property': 'attributes.maven2.artifactId',
'value': artifact_id
},
{
'property': 'attributes.maven2.groupId',
'value': group_id
},
# 只查问 release 版本
{
'property': 'repository_name',
'value': 'maven-releases'
}
]
}
],
'type': 'rpc',
'tid': 14
}
return request_dist
# json 格局的 post 申请
def __post_json(request_dist, url, cookie):
# 将数据转为 JSON 格局
data_json = json.dumps(request_dist)
headers = {'Cookie': cookie, 'content-type': 'application/json', 'charset': 'utf-8'}
response = requests.post(url, data=data_json.encode('utf-8'), headers=headers)
return response.text
if __name__ == '__main__':
main()