collect.py: support new format
authorMoritz Warning <moritzwarning@web.de>
Sun, 24 May 2020 11:59:57 +0000 (13:59 +0200)
committerMoritz Warning <moritzwarning@web.de>
Sun, 24 May 2020 11:59:57 +0000 (13:59 +0200)
misc/collect.py

index f5f2556bb6eaff721e305b35da86ebf1a8022cfe..bb7b3ae35b65611e0279b24f7893d11d8ae527e3 100755 (executable)
@@ -42,52 +42,53 @@ def get_title_name(title):
   else:
     return "{} {} {}".format(title.get('vendor', ''), title['model'], title.get('variant', '')).strip()
 
-# json output data
-output = {}
-for path in paths:
-  with open(path, "r") as file:
-    try:
-      obj = json.load(file)
+def add_profile(id, target, profile):
+  images = []
+  for image in profile['images']:
+      images.append({'name': image['name'], 'type': image['type']})
 
-      if obj['metadata_version'] != SUPPORTED_METADATA_VERSION:
-        sys.stderr.write('{} has unsupported metadata version: {} => skip\n'.format(path, obj['metadata_version']))
-        continue
+  if args.change_prefix:
+      change_prefix(images, 'openwrt-', args.change_prefix)
 
-      code = obj.get('version_code', obj.get('version_commit'))
+  for title in profile['titles']:
+    name = get_title_name(title)
 
-      if not 'version_code' in output:
-        output = {
-          'version_code': code,
-          'url': args.url,
-          'models' : {}
-        }
+    if len(name) == 0:
+      sys.stderr.write("Empty title. Skip title in {}\n".format(path))
+      continue
 
-      # only support a version_number with images of a single version_commit
-      if output['version_code'] != code:
-        sys.stderr.write('mixed revisions for a release ({} and {}) => abort\n'.format(output['version_code'], commit))
-        exit(1)
+    output['models'][name] = {'id': id, 'target': target, 'images': images}
 
-      images = []
-      for image in obj['images']:
-          images.append({'name': image['name'], 'type': image['type']})
+for path in paths:
+  with open(path, "r") as file:
+    obj = json.load(file)
 
-      if args.change_prefix:
-          change_prefix(images, 'openwrt-', args.change_prefix)
+    if obj['metadata_version'] != SUPPORTED_METADATA_VERSION:
+      sys.stderr.write('{} has unsupported metadata version: {} => skip\n'.format(path, obj['metadata_version']))
+      continue
 
-      target = obj['target']
-      id = obj['id']
-      for title in obj['titles']:
-        name = get_title_name(title)
+    code = obj.get('version_code', obj.get('version_commit'))
 
-        if len(name) == 0:
-          sys.stderr.write("Empty title. Skip title in {}\n".format(path))
-          continue
+    if not 'version_code' in output:
+      output = {
+        'version_code': code,
+        'url': args.url,
+        'models' : {}
+      }
 
-        output['models'][name] = {'id': id, 'target': target, 'images': images}
+    # only support a version_number with images of a single version_commit
+    if output['version_code'] != code:
+      sys.stderr.write('mixed revisions for a release ({} and {}) => abort\n'.format(output['version_code'], commit))
+      exit(1)
 
+    try:
+      if 'profiles' in obj:
+        for id in obj['profiles']:
+          add_profile(id, obj['target'], obj['profiles'][id])
+      else:
+        add_profile(obj['id'], obj['target'], obj)
     except json.decoder.JSONDecodeError as e:
       sys.stderr.write("Skip {}\n   {}\n".format(path, e))
-      continue
     except KeyError as e:
       sys.stderr.write("Abort on {}\n   Missing key {}\n".format(path, e))
       exit(1)