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
|
def update_release_list(self):
"""
获取项目release清单并更新以保持清单列表文件
:return:
""" for project in self.projects:
name = project["name"]
url = self.baseUrl + f'/repos/{project["repo"]}/releases'
res = requests.get(url, headers=self.headers)
# 获取项目总页数
pages = APIs.github_page_count(res)
total = pages['last'] if 'last' in pages else 1
# 已保存的release清单,作为当前清单基准
if not os.path.exists(os.path.join(self.release_dir, f'{name}.json')):
old_list = []
else:
with open(os.path.join(self.release_dir, f'{name}.json'), "r", encoding='utf-8') as file:
old_list = json.load(file)
release_list = old_list
# 去除原清单中的状态字段, 用于比对
old_list = [{k: v for k, v in d.items() if k != 'status'} for d in old_list]
# 首页已获取,生成清单,默认状态False(未获取detail)
if res.headers['content-type'].find('json') > 0 and isinstance(res.json(), list):
for release in res.json():
record = {'id': release['id'],
'name': release['name'],
'date': release['created_at']}
if record not in old_list:
record['status'] = False
release_list.append(record)
print(f'got release {release['id']}-{release['name']}, 1-{total}')
else:
print(f'release {release['id']}-{release['name']} exist!')
# 获取后续页面清单
if 'last' in pages and 'next' in pages:
for i in range(pages['next'], total + 1):
page_url = url + f'?page={i}'
res = requests.get(page_url, headers=self.headers)
if res.headers['content-type'].find('json') > 0 and isinstance(res.json(), list):
for release in res.json():
record = {'id': release['id'],
'name': release['name'],
'date': release['created_at']}
if record not in old_list:
record['status'] = False
release_list.append(record)
print(f'got release {release['id']}-{release['name']}, {i}-{total}')
else:
print(f'release {release['id']}-{release['name']} exist!')
# 按id排序
release_list.sort(key=lambda x: x['id'], reverse=True)
# 更新清单文件
with open(os.path.join(self.release_dir, f'{name}.json'), "w", encoding='utf-8') as file:
file.write(json.dumps(release_list))
|