improve collect.py script
[web/firmware-selector-openwrt-org.git] / collect.py
1 #!/usr/bin/env python3
2
3 from pathlib import Path
4 import json
5 import sys
6 import os
7
8
9 SUPPORTED_METADATA_VERSION = 1
10
11 paths = []
12 output = {}
13
14 for arg in sys.argv[1:]:
15 if os.path.isdir(arg):
16 for path in Path(arg).rglob('*.json'):
17 paths.append(path)
18 elif os.path.isfile(arg) and arg.endswith('.json'):
19 paths.append(arg)
20 else:
21 sys.stderr.write("Not a directory and not a .json file: {} => abort\n".format(arg))
22 exit(1)
23
24
25 def collect_names(images):
26 names = []
27 for image in images:
28 names.append(image['name'])
29 return names
30
31 for path in paths:
32 with open(path, "r") as file:
33 try:
34 obj = json.load(file)
35 except json.decoder.JSONDecodeError as e:
36 sys.stderr.write("Skip {}\n {}\n".format(path, e))
37 continue
38
39 if obj['metadata_version'] != SUPPORTED_METADATA_VERSION:
40 sys.stderr.write('{} has unsupported metadata version: {} => skip\n'.format(path, obj['metadata_version']))
41 continue
42
43 version = obj['version_number']
44 commit = obj['version_commit']
45
46 if not version in output:
47 output[version] = { 'models' : [], 'commit': commit}
48
49 # only support a version_number with images of one version_commit
50 if output[version]['commit'] != commit:
51 sys.stderr.write('mixed revisions for a release ({} and {}) => abort\n'.format(output[version]['commit'], commit))
52 exit(1)
53
54 for title in obj['titles']:
55 output[version]['models'].append([title['vendor'], title['model'], title.get('variant', ''), obj['target'], collect_names(obj['images'])])
56
57 json.dump(output, sys.stdout, sort_keys=True)
58 #json.dump(output, sys.stdout, sort_keys=True, indent=" ")