Create polymorphism for printing, add table_print() method for each class
authorAlexander Popov <alex.popov@linux.com>
Tue, 31 Mar 2020 13:18:05 +0000 (16:18 +0300)
committerAlexander Popov <alex.popov@linux.com>
Tue, 31 Mar 2020 13:18:05 +0000 (16:18 +0300)
That makes print_checklist() much better.

kconfig_hardened_check/__init__.py

index 48e545445b8af1a597da7df2ef1549d0e4fb8755..f56ee3775f2c44beb4a9d03c33a5bb58c46061be 100755 (executable)
@@ -98,6 +98,12 @@ class OptCheck:
         else:
             return False, self.result
 
+    def table_print(self, with_results):
+        print('CONFIG_{:<38}|{:^13}|{:^10}|{:^20}'.format(self.name, self.expected, self.decision, self.reason), end='')
+        if with_results:
+            print('|   {}'.format(self.result), end='')
+        print()
+
 
 class VerCheck:
     def __init__(self, ver_expected):
@@ -118,6 +124,13 @@ class VerCheck:
             self.result = 'FAIL: version < ' + str(self.ver_expected[0]) + '.' + str(self.ver_expected[1])
             return False, self.result
 
+    def table_print(self, with_results):
+        ver_req = 'kernel version >= ' + str(self.ver_expected[0]) + '.' + str(self.ver_expected[1])
+        print('{:<91}'.format(ver_req), end='')
+        if with_results:
+            print('|   {}'.format(self.result), end='')
+        print()
+
 
 class ComplexOptCheck:
     def __init__(self, *opts):
@@ -144,6 +157,18 @@ class ComplexOptCheck:
     def reason(self):
         return self.opts[0].reason
 
+    def table_print(self, with_results):
+        if debug_mode:
+            print('    {:87}'.format('<<< ' + self.__class__.__name__ + ' >>>'), end='')
+            if with_results:
+                print('|   {}'.format(self.result), end='')
+            print()
+            for o in self.opts:
+                o.table_print(with_results)
+        else:
+            o = self.opts[0]
+            o.table_print(with_results)
+
 
 class OR(ComplexOptCheck):
     # self.opts[0] is the option that this OR-check is about.
@@ -458,13 +483,6 @@ def construct_checklist(checklist, arch):
 #   checklist.append(OptCheck('LKDTM',    'm', 'my', 'feature_test'))
 
 
-def print_opt(opt, with_results):
-    print('CONFIG_{:<38}|{:^13}|{:^10}|{:^20}'.format(opt.name, opt.expected, opt.decision, opt.reason), end='')
-    if with_results:
-        print('|   {}'.format(opt.result), end='')
-    print()
-
-
 def print_checklist(checklist, with_results):
     if json_mode:
         opts = []
@@ -489,22 +507,7 @@ def print_checklist(checklist, with_results):
 
     # table contents
     for opt in checklist:
-        if debug_mode and hasattr(opt, 'opts'):
-            print('    {:87}'.format('<<< ' + opt.__class__.__name__ + ' >>>'), end='')
-            if with_results:
-                print('|   {}'.format(opt.result), end='')
-            print()
-            for o in opt.opts:
-                if hasattr(o, 'ver_expected'):
-                    ver_req = 'kernel version >= ' + str(o.ver_expected[0]) + '.' + str(o.ver_expected[1])
-                    print('{:<91}'.format(ver_req), end='')
-                    if with_results:
-                        print('|   {}'.format(o.result), end='')
-                    print()
-                else:
-                    print_opt(o, with_results)
-        else:
-            print_opt(opt, with_results)
+        opt.table_print(with_results)
         if debug_mode:
             print('-' * sep_line_len)
     print()