Browse Source

Redesign outputfile and take respect of bootloader images

Michael Schwarz 3 years ago
parent
commit
cff96e321f
1 changed files with 44 additions and 43 deletions
  1. 44 43
      scripts/buildModels.py

+ 44 - 43
scripts/buildModels.py

@@ -64,63 +64,64 @@ def longestPrefixKeyMatch(string, dictionary):
                 retval = key
     return retval
 
+def vendorPP(vendor):
+    if vendor in VENDORS:
+	return VENDORS[vendor]
+    else:
+        return vendor
+
 def findFiles(directory):
-    retval = []
-    searchpath = directory + "/sysupgrade/"
-    factory = directory + "/factory/"
-    pattern = PREFIX + "-(([0-9]+\.?)+)-(.+)-sysupgrade\.([a-z\.]+)"
-    for f in os.listdir(searchpath):
-        m = re.search(pattern, f)
-        if m:
-            # extract info from filename
-            firmware = m.group(3)
-            imageversion = m.group(1)
-            imagetype = m.group(4)
+    retval = {}
+    for imtype in ['sysupgrade', 'factory', 'bootloader']:
+        searchpath = directory + "/"+imtype+"/"
+        if imtype == 'sysupgrade':
+            pattern = PREFIX + "-(([0-9]+\.?)+)-(.+)-sysupgrade\.((img|bin|img.gz|ubi|chk|vdi|vmdk|tar))"
+        elif imtype == 'bootloader':
+            pattern = PREFIX + "-(([0-9]+\.?)+)-(.+)-bootloader\.((img|bin|img.gz|ubi|chk|vdi|vmdk|tar))"
+        else:  
+            pattern = PREFIX + "-(([0-9]+\.?)+)-(.+)\.((img|bin|img.gz|ubi|chk|vdi|vmdk|tar))"
 
-            vendor = 'Unknown'
-            model = 'Unknown'
-            vendor_key = longestPrefixKeyMatch(firmware, VENDORS)
-            if vendor_key:
-                vendor = VENDORS[vendor_key]
-                n = re.search(vendor_key + "-(.+)$", firmware)
-                if n: 
-                    model = n.group(1)
+        for f in os.listdir(searchpath):
+            m = re.search(pattern, f)
+            if m:
+                # extract info from filename
+		file = m.group(0)
+                firmware = m.group(3)
+                imageversion = m.group(1)
+                imagetype = m.group(4)
 
-            if model in BLACKLIST_MODELS:
-                continue
+                vendor = 'Unknown'
+                model = 'Unknown'
+                vendor_key = longestPrefixKeyMatch(firmware, VENDORS)
+                if vendor_key:
+                    vendor = VENDORS[vendor_key]
+                    n = re.search(vendor_key + "-(.+)$", firmware)
+                    if n: 
+                        model = n.group(1)
 
-            has_factory = False
-            if os.path.isfile(factory + PREFIX + "-" + imageversion + "-" + firmware + "." + imagetype):
-                has_factory = True
+                if model in BLACKLIST_MODELS:
+                    continue
 
-            retval.append({'firmware' : firmware, 
-                'imagetype' : imagetype, 
-                'imageversion' : imageversion, 
-                'vendor' : vendor,
-                'model' : model,
-                'factory' : has_factory
-                })
+		vendor = vendorPP(vendor)
+                entry = {'vendor' : vendor,
+                    'model' : model,
+                    'file' : file
+                    }
+                if vendor not in retval:
+                    retval.update({vendor : {}})
+                if model not in retval[vendor]:
+                    retval[vendor].update({model : {}})
+                retval[vendor][model].update({imtype : entry})
 
     return retval
 
-def buildDictForJSON(data):
-    retval = {}
-    for vendor in VENDORS:
-        retval[VENDORS[vendor]] = {}
-        for entry in data:
-            if entry['vendor'] == VENDORS[vendor]:
-                retval[VENDORS[vendor]][entry['model']] = entry
-    return retval
-
-
 if __name__ == "__main__":
     parser = argparse.ArgumentParser(description='Build models.json file.')
     parser.add_argument('directory', help='Directory where the firmware files are')
     parser.add_argument('outputfile', help='Write output to file', nargs='?')
 
     args = parser.parse_args()
-    files = findFiles(args.directory)
-    data = buildDictForJSON(files)
+    data = findFiles(args.directory)
 
     if args.outputfile:
         with open(args.outputfile, "w") as fd: