提交 b01e7c0a 编写于 作者: S Shinwell Hu

Merge branch 'next' of gitee.com:shinwell_hu/openEuler-Advisor into next

......@@ -116,13 +116,12 @@ Yours openEuler-Advisor.
"""
get openeuler spec file for specific package
"""
specurl = self.specfile_url_template.format(package=pkg, specfile=pkg + ".spec")
exp = self.get_spec_exception()
if pkg in exp:
dir_name = exp[pkg]["dir"]
file_name = exp[pkg]["file"]
specurl = self.specfile_url_template.format(package=pkg, specfile=dir_name + "/" + file_name)
else:
specurl = self.specfile_url_template.format(package=pkg, specfile=pkg + ".spec")
specurl = urllib.parse.urljoin(specurl, os.path.join(dir_name, file_name))
try:
resp = self.get_gitee(specurl)
......
......@@ -3,18 +3,24 @@
import re
import datetime
import time
from typing import List
__ALL__ = ["VersionRecommend"]
class VersionType:
class VersionType(object):
def __init__(self):
self._version_type = None
def version_match(self, pkg_version):
pass
def latest_version(self, version_entry):
version_entry.sort(reverse = True)
version_entry.sort(reverse=True)
return version_entry[0]
def maintain_version(self, version_entry, current_version, pkg_type):
_ = version_entry, pkg_type
return current_version
def _max(self, z1, z2):
......@@ -39,13 +45,9 @@ class VersionType:
else:
return -1
def __init__(self):
self._version_type = ''
def get_version_mode(self):
return self._version_type
def _split(self, x):
for f, s in re.findall(r'([\d.]+)|([^\d.]+)', x):
if f:
......@@ -55,8 +57,8 @@ class VersionType:
yield s
class VersionTypeXYZW(VersionType):
class VersionType_x_y_z_w(VersionType):
def version_match(self, pkg_version):
version = pkg_version.strip()
digital_list = re.split(r'[._-]', version)
......@@ -168,10 +170,12 @@ class VersionType_x_y_z_w(VersionType):
return ''
def __init__(self):
super().__init__()
self._version_type = 'x.y.z.w'
class VersionType_x_y_z(VersionType):
class VersionTypeXYZ(VersionType):
def version_match(self, pkg_version):
version = pkg_version.strip()
digital_list = re.split(r'[._-]', version)
......@@ -263,10 +267,12 @@ class VersionType_x_y_z(VersionType):
return ''
def __init__(self):
super().__init__()
self._version_type = 'x.y.z'
class VersionType_x_y(VersionType):
class VersionTypeXY(VersionType):
def version_match(self, pkg_version):
version = pkg_version.strip()
digital_list = re.split(r'[._-]', version)
......@@ -279,6 +285,7 @@ class VersionType_x_y(VersionType):
return True
def __init__(self):
super().__init__()
self._version_type = 'x.y'
def latest_version(self, version_entry):
......@@ -292,7 +299,6 @@ class VersionType_x_y(VersionType):
if self._max(x, version[0]) < 0:
x = version[0]
version_candidate = []
for version in version_list: # 将第一位最大的列入候选列表,准备第二位比较
if x == version[0]:
......@@ -309,7 +315,6 @@ class VersionType_x_y(VersionType):
if self._max(y, version[1]) < 0:
y = version[1]
version_candidate.clear()
for version in version_list: # x.y 版本类型中会小概率出现三位版本号,需要将第二位最大的列入候选列表,准备第三位比较
if len(version) <= 1: # 过滤仅一位的版本号
......@@ -339,8 +344,7 @@ class VersionType_x_y(VersionType):
def maintain_version(self, version_entry, current_version, pkg_type):
version_candidate = []
version_digital = re.split(r'[._-]', current_version) # 将版本号做拆分
x = []
x.append(version_digital[0])
x = [version_digital[0]]
for version in version_entry:
version_temp = re.split(r'[._-]', version)
if version_digital[0] == version_temp[0]: # 如果版本号与当前版本前两位一致,说明是维护分支版本
......@@ -359,7 +363,9 @@ class VersionType_x_y(VersionType):
x.append(y)
return '.'.join(x)
class VersionType_x(VersionType):
class VersionTypeX(VersionType):
def version_match(self, pkg_version):
version = pkg_version.strip()
digital_list = re.split(r'[._-]', version)
......@@ -370,9 +376,9 @@ class VersionType_x(VersionType):
return True
def latest_version(self, version_entry):
if len(version_entry) == 1: # 仅一个版本,当前即为最新版本
if 1 == len(version_entry): # 仅一个版本,当前即为最新版本
return version_entry[0]
version_list = []
version_list: List[List[str]] = []
for version in version_entry:
version_list.append(re.split(r'[._-]', version)) # 将 version 拆分为列表,方便后续比较
x = '0'
......@@ -402,8 +408,7 @@ class VersionType_x(VersionType):
def maintain_version(self, version_entry, current_version, pkg_type):
version_candidate = []
version_digital = re.split(r'[._-]', current_version) # 将版本号做拆分
x = []
x.append(version_digital[0])
x = [version_digital[0]]
for version in version_entry:
version_temp = re.split(r'[._-]', version)
if version_digital[0] == version_temp[0]: # 如果版本号与当前版本前两位一致,说明是维护分支版本
......@@ -421,11 +426,14 @@ class VersionType_x(VersionType):
y = version[1]
x.append(y)
return '.'.join(x)
def __init__(self):
super().__init__()
self._version_type = 'x'
class VersionType_yyyy_x_y(VersionType):
class VersionTypeYyyyXY(VersionType):
def version_match(self, pkg_version):
version = pkg_version.strip()
digital_list = re.split(r'[._-]', version)
......@@ -454,10 +462,12 @@ class VersionType_yyyy_x_y(VersionType):
return True
def __init__(self):
super().__init__()
self._version_type = 'yyyy.x.y'
class VersionType_yyyy_x(VersionType):
class VersionTypeYyyyX(VersionType):
def version_match(self, pkg_version):
version = pkg_version.strip()
digital_list = re.split(r'[._-]', version)
......@@ -475,10 +485,12 @@ class VersionType_yyyy_x(VersionType):
return True
def __init__(self):
super().__init__()
self._version_type = 'yyyy.x'
class VersionType_yyyyw(VersionType):
class VersionTypeYyyyW(VersionType):
def version_match(self, pkg_version):
version = pkg_version.strip()
if len(version) != 5: # 共5 位
......@@ -493,9 +505,12 @@ class VersionType_yyyyw(VersionType):
return True
def __init__(self):
super().__init__()
self._version_type = 'yyyyw'
class VersionType_yyyy_mm_dd(VersionType):
class VersionTypeYyyyMmDd(VersionType):
def version_match(self, pkg_version):
version = pkg_version.strip()
digital_list = re.split(r'[._-]', version)
......@@ -515,7 +530,7 @@ class VersionType_yyyy_mm_dd(VersionType):
try:
if '_' in version:
d_time = time.mktime(time.strptime(version, "%Y_%m_%d"))
elif '-'in version:
elif '-' in version:
d_time = time.mktime(time.strptime(version, "%Y-%m-%d"))
elif '.' in version:
d_time = time.mktime(time.strptime(version, "%Y.%m.%d"))
......@@ -528,15 +543,17 @@ class VersionType_yyyy_mm_dd(VersionType):
return False
else:
return True
except: # 时间格式非法
except ValueError as e: # 时间格式非法
print('Time foramt failed %s.', version)
return False
def __init__(self):
super().__init__()
self._version_type = 'yyyy.mm.dd'
class VersionType_yyyy_mm(VersionType):
class VersionTypeYyyyMm(VersionType):
def version_match(self, pkg_version):
version = pkg_version.strip()
digital_list = re.split(r'[._-]', version)
......@@ -559,20 +576,21 @@ class VersionType_yyyy_mm(VersionType):
return True
def __init__(self):
super().__init__()
self._version_type = 'yyyy.mm'
class VersionType_yyyymm(VersionType):
class VersionTypeYyyyMm(VersionType):
def version_match(self, pkg_version):
version = pkg_version.strip()
if len(version) != 6: # 长度为6
return False
if not version.isdigit(): #时间格式为数字
if not version.isdigit(): # 时间格式为数字
return False
digital_list = []
digital_list.append(version[0:4])
digital_list.append(version[4:])
digital_list = [version[0:4], version[4:]]
if len(digital_list[0]) != 4: # 第一位为发布年份,位数为4位
return False
......@@ -590,9 +608,12 @@ class VersionType_yyyymm(VersionType):
return True
def __init__(self):
super().__init__()
self._version_type = 'yyyymm'
class VersionType_x_yymm_z(VersionType):
class VersionTypeXYymmZ(VersionType):
def version_match(self, pkg_version):
version = pkg_version.strip()
digital_list = re.split(r'[._-]', version)
......@@ -608,17 +629,19 @@ class VersionType_x_yymm_z(VersionType):
month = str(digital_list[1][-2:])
if year > datetime.datetime.now().year[-2:]: # 年份不能大于当前年份,不用考虑20000 年前的情况
return False
if month > 12 or month == 0:
if month > '12' or month == '0':
return False
if len(digital_list[2]) > 2: # 迭代号不大于2位
return False
return True
def __init__(self):
super().__init__()
self._version_type = 'x.yymm.z'
class VersionType_yyyymmdd(VersionType):
class VersionTypeYyyymmdd(VersionType):
def version_match(self, pkg_version):
version = pkg_version.strip()
if len(version) != 8: # 日期长度满足 8 位要求
......@@ -642,17 +665,17 @@ class VersionType_yyyymmdd(VersionType):
return False
else:
return True
except: # 时间格式非法
except ValueError as e: # 时间格式非法
print('Time format failed %s,', version)
return False
def __init__(self):
super().__init__()
self._version_type = 'yyyymmdd'
class VersionRecommend(object):
class VersionRecommend:
def __init__(self, version_entry, current_version, pkg_type):
self.latest_version = current_version # 提供初值,避免 current_version 为空导致后面出现异常
self.maintain_version = current_version
......@@ -667,18 +690,18 @@ class VersionRecommend:
def _version_match(self, version_entry):
version_method = {VersionType_x_y_z_w(): 0,
VersionType_x_y_z(): 0,
VersionType_x_y(): 0,
VersionType_x(): 0,
VersionType_yyyy_x_y(): 0,
VersionType_yyyy_x(): 0,
VersionType_yyyyw(): 0,
VersionType_yyyy_mm_dd(): 0,
VersionType_yyyy_mm(): 0,
VersionType_yyyymm(): 0,
VersionType_x_yymm_z(): 0,
VersionType_yyyymmdd(): 0}
version_method = {VersionTypeXYZW(): 0,
VersionTypeXYZ(): 0,
VersionTypeXY(): 0,
VersionTypeX(): 0,
VersionTypeYyyyXY(): 0,
VersionTypeYyyyX(): 0,
VersionTypeYyyyW(): 0,
VersionTypeYyyyMmDd(): 0,
VersionTypeYyyyMm(): 0,
VersionTypeYyyyMm(): 0,
VersionTypeXYymmZ(): 0,
VersionTypeYyyymmdd(): 0}
if not version_entry:
return None
for version in version_entry[:]:
......@@ -698,7 +721,7 @@ class VersionRecommend:
return method
def _version_valid(self, version):
m = re.match('^[a-z0-9_\-\.]*$',version)
m = re.match("^[0-9a-zA-Z._-]*$", version)
if m is None: # 版本号应该是 数字/小写字母/下划线/. 组成
return False
......@@ -738,6 +761,7 @@ class VersionRecommend:
if __name__ == '__main__':
version_recommend = VersionRecommend(['0.1','0.2','1.2.3','1.2.4','1.2.6','1.3.0','2.0.1','1.2','1.4','1.5-rc','2.0-rc'],'1.2.3',0)
version_recommend = VersionRecommend(
['0.1', '0.2', '1.2.3', '1.2.4', '1.2.6', '1.3.0', '1.5-rc', '2.0-rc'], '1.2.3', 0)
print('latest_version', version_recommend.latest_version)
print('maintain_version', version_recommend.maintain_version)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册