|
@@ -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:
|