improve collect.py script
[web/firmware-selector-openwrt-org.git] / collect.py
index 3ec6ccdce5a694a95e038ce6355730bef2a7d9e1..8c7b9f962159bec7d7f6aa3230da7d552f8f9429 100755 (executable)
@@ -2,34 +2,42 @@
 
 from pathlib import Path
 import json
+import sys
 import os
-import hashlib
+
 
 SUPPORTED_METADATA_VERSION = 1
 
 paths = []
-for path in Path('bin').rglob('*.json'):
-  paths.append(path)
-
-version = None
 output = {}
 
+for arg in sys.argv[1:]:
+  if os.path.isdir(arg):
+    for path in Path(arg).rglob('*.json'):
+      paths.append(path)
+  elif os.path.isfile(arg) and arg.endswith('.json'):
+    paths.append(arg)
+  else:
+    sys.stderr.write("Not a directory and not a .json file: {} => abort\n".format(arg))
+    exit(1)
+
+
 def collect_names(images):
-       names = []
-       for image in images:
-               names.append(image['name'])
-       return names
+  names = []
+  for image in images:
+    names.append(image['name'])
+  return names
 
 for path in paths:
   with open(path, "r") as file:
     try:
       obj = json.load(file)
     except json.decoder.JSONDecodeError as e:
-        print("Skip {}\n   {}".format(path, e))
+        sys.stderr.write("Skip {}\n   {}\n".format(path, e))
         continue
 
     if obj['metadata_version'] != SUPPORTED_METADATA_VERSION:
-      print('{} has unsupported metadata version: {} => skip'.format(path, obj['metadata_version']))
+      sys.stderr.write('{} has unsupported metadata version: {} => skip\n'.format(path, obj['metadata_version']))
       continue
 
     version = obj['version_number']
@@ -40,11 +48,11 @@ for path in paths:
 
     # only support a version_number with images of one version_commit
     if output[version]['commit'] != commit:
-      print('mixed revisions for a release ({} and {}) => abort'.format(output[version]['commit'], commit))
-      break
+      sys.stderr.write('mixed revisions for a release ({} and {}) => abort\n'.format(output[version]['commit'], commit))
+      exit(1)
 
     for title in obj['titles']:
       output[version]['models'].append([title['vendor'], title['model'], title.get('variant', ''), obj['target'], collect_names(obj['images'])])
 
-with open("data.json", "w") as file:
-  json.dump(output, file, sort_keys=True, indent="  ")
+json.dump(output, sys.stdout, sort_keys=True)
+#json.dump(output, sys.stdout, sort_keys=True, indent="  ")