-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathrel_pagejson_dump.py
More file actions
56 lines (42 loc) · 1.37 KB
/
rel_pagejson_dump.py
File metadata and controls
56 lines (42 loc) · 1.37 KB
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
import glob
import json
import sys
import semver
import versions
def try_semver(v):
try:
v = '.'.join(str(int(p)) for p in v.split('.'))
return versions.try_semver(v)
except:
return None
def run():
ipath = sys.argv[1]
recs = {}
for f in glob.glob(f"{ipath}/[0-9]*.json"):
with open(f, 'r') as j:
p = json.load(j)
proj = {
'title': p['title'],
'pkgs': {}
}
for pkg, rels in p['modules'].items():
for rel, files in rels.items():
for f in files:
if 'url' in f:
proj['pkgs'].setdefault(pkg, {}).setdefault(rel, []).append((f.get('version', None), f['filename']))
recs[p['title']] = proj
for t in sorted(recs.keys()):
r = recs[t]
print('')
print(r['title'])
for pn, pv in r['pkgs'].items():
print(f" {pn}")
for rn, rv in sorted(pv.items(), key=lambda x: versions.try_semver(x[0]), reverse=True):
print(f" {rn}")
rv.sort(key=lambda x: x[1])
rv.sort(key=lambda x: 1 if x[0] is None else 0)
rv.sort(key=lambda x: semver.Version.parse(x[0] or '0.0.0'), reverse=True)
for m in rv:
print(f" {m}")
if __name__ == '__main__':
run()