获取私服应用最大Release版本

前置依赖

需要安装python环境

操作指南

1.更改todo中私服地址,文件名nexus_max_version.py

import easygui as eg
import requests

import re
import math
import json


# 从集合中,查找出最大的版本号
def __get_max_version(version_list):
    # 初始值设为 0.0.0
    # 数据格式为 ('完整的版本号',主版本号, 次版本号, 小版本号)
    max_version_tup = ('0.0.0', 0, 0, 0)
    if len(version_list) == 0:
        return None
    for current_version in version_list:
        # 正则去除不符合格式的
        match = re.match('^\d+\.\d+\.\d+$', current_version)
        if match:
            # 对于形如 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

# todo 填写自己公司的nexus url
NEXUS_URL = 'https://*****/service/extdirect'
NEXUS_COOKIE = 'onetwothree'
msg = 'Nexus RELEASE版本获取程序'
title = 'Nexus Release版本获取'
param_names = ['GROUP_ID', 'ARTIFACT_ID']
default_values = ['com.yaowu', '']


def __get_max_release_version():
    param_values = eg.multenterbox(msg, title, fields=param_names, values=default_values)
    if param_values is not None:
        print(param_values)
        GROUP_ID = param_values[0]
        print('GROUP_ID', GROUP_ID)
        ARTIFACT_ID = param_values[1]
        print('ARTIFACT_ID', ARTIFACT_ID)
        if GROUP_ID == '' or ARTIFACT_ID == '':
            __get_max_release_version()
        # 从nexus获取指定项目的所有版本号
        version_list = __get_version_list(ARTIFACT_ID, GROUP_ID, NEXUS_URL, NEXUS_COOKIE)

        # 计算出最大的版本号
        max_version = __get_max_version(version_list)
        if max_version is None:
            result_msg = '不存在 ' + ARTIFACT_ID + ' 的版本号'
        else:
            result_msg = '最新 ' + ARTIFACT_ID + ' 的RELEASE版本号 >>>   ' + max_version
        button = eg.msgbox(title='版本号查询结果', msg=result_msg, ok_button='OK')
        if button == 'OK':
            __get_max_release_version()


__get_max_release_version()

2.安装pyinstaller(其他文件中引用的依赖也可以用pip install来安装)

pip install pyinstaller

3.使用pyinstaller打包应用

pyinstaller -F -w nexus_max_version.py

同级dist目录中会出现一个名为nexus_max_version.exe的应用

使用效果

查询到结果

未查询到结果

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值