diff --git a/bundle.py b/bundle.py new file mode 100644 index 0000000..fc6e83b --- /dev/null +++ b/bundle.py @@ -0,0 +1,76 @@ +import base64 +import json +import os +import sys + +def encode_recursive(path): + list = {} + + for item in os.listdir(path): + item_path = path + '/' + item + + if os.path.isfile(item_path): + handle = open(item_path, 'r') + list[item] = base64.b64encode(bytes(handle.read(), 'UTF-8')).decode('ASCII') + handle.close() + else: + list[item] = encode_recursive(item_path) + + return list + +def encode_files(files): + list = {} + + for item in files: + item_path = './' + item + + handle = open(item_path, 'r') + list[item] = base64.b64encode(bytes(handle.read(), 'UTF-8')).decode('ASCII') + handle.close() + + return list + +manifest = { + "files" : { + # common files + "system" : encode_files([ "initenv.lua", "startup.lua", "configure.lua", "LICENSE" ]), + "common" : encode_recursive("./scada-common"), + "graphics" : encode_recursive("./graphics"), + "lockbox" : encode_recursive("./lockbox"), + # platform files + "reactor-plc" : encode_recursive("./reactor-plc"), + "rtu" : encode_recursive("./rtu"), + "supervisor" : encode_recursive("./supervisor"), + "coordinator" : encode_recursive("./coordinator"), + "pocket" : encode_recursive("./pocket"), + }, + "depends" : { + "reactor-plc" : [ "reactor-plc", "system", "common", "graphics", "lockbox" ], + "rtu" : [ "rtu", "system", "common", "graphics", "lockbox" ], + "supervisor" : [ "supervisor", "system", "common", "graphics", "lockbox" ], + "coordinator" : [ "coordinator", "system", "common", "graphics", "lockbox" ], + "pocket" : [ "pocket", "system", "common", "graphics", "lockbox" ] + } +} + +def write_items(body, items, indent): + indent_str = " " * indent + for key, value in items.items(): + if isinstance(value, str): + body = body + f"{indent_str}['{key}'] = \"{value}\",\n" + else: + body = body + f"{indent_str}['{key}'] = {{\n" + body = write_items(body, value, indent + 4) + body = body + f"{indent_str}}},\n" + + return body + + +for app in [ "reactor-plc", "rtu", "supervisor", "coordinator", "pocket" ]: + f = open("_" + app + ".lua", "w") + body = "local application = {\n" + for depend in manifest["depends"][app]: + body = body + write_items("", { f"{depend}": manifest["files"][depend] }, 4) + body = body + "}\n\n" + f.write(body) + f.close()