]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/FMMT/utils/FvLayoutPrint.py
BaseTools: Add FMMT Python Tool
[mirror_edk2.git] / BaseTools / Source / Python / FMMT / utils / FvLayoutPrint.py
diff --git a/BaseTools/Source/Python/FMMT/utils/FvLayoutPrint.py b/BaseTools/Source/Python/FMMT/utils/FvLayoutPrint.py
new file mode 100644 (file)
index 0000000..7dafcae
--- /dev/null
@@ -0,0 +1,55 @@
+## @file\r
+# This file is used to define the printer for Bios layout.\r
+#\r
+# Copyright (c) 2021-, Intel Corporation. All rights reserved.<BR>\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
+##\r
+from utils.FmmtLogger import FmmtLogger as logger\r
+\r
+def GetFormatter(layout_format: str):\r
+    if layout_format == 'json':\r
+        return JsonFormatter()\r
+    elif layout_format == 'yaml':\r
+        return YamlFormatter()\r
+    elif layout_format == 'html':\r
+        return HtmlFormatter()\r
+    else:\r
+        return TxtFormatter()\r
+\r
+class Formatter(object):\r
+    def dump(self, layoutdict, layoutlist, outputfile: str=None) -> None:\r
+        raise NotImplemented\r
+\r
+class JsonFormatter(Formatter):\r
+    def dump(self,layoutdict: dict, layoutlist: list, outputfile: str=None) -> None:\r
+        try:\r
+            import json\r
+        except:\r
+            TxtFormatter().dump(layoutdict, layoutlist, outputfile)\r
+            return\r
+        print(outputfile)\r
+        if outputfile:\r
+            with open(outputfile,"w") as fw:\r
+                json.dump(layoutdict, fw, indent=2)\r
+        else:\r
+            print(json.dumps(layoutdict,indent=2))\r
+\r
+class TxtFormatter(Formatter):\r
+    def LogPrint(self,layoutlist: list) -> None:\r
+        for item in layoutlist:\r
+            print(item)\r
+        print('\n')\r
+\r
+    def dump(self,layoutdict: dict, layoutlist: list, outputfile: str=None) -> None:\r
+        logger.info('Binary Layout Info is saved in {} file.'.format(outputfile))\r
+        with open(outputfile, "w") as f:\r
+            for item in layoutlist:\r
+                f.writelines(item + '\n')\r
+\r
+class YamlFormatter(Formatter):\r
+    def dump(self,layoutdict, layoutlist, outputfile = None):\r
+        TxtFormatter().dump(layoutdict, layoutlist, outputfile)\r
+\r
+class HtmlFormatter(Formatter):\r
+    def dump(self,layoutdict, layoutlist, outputfile = None):\r
+        TxtFormatter().dump(layoutdict, layoutlist, outputfile)\r
\ No newline at end of file