[PATCH 1/9] sb: Introduce formatter classes

Sebastian Huber sebastian.huber at embedded-brains.de
Mon Dec 8 06:48:44 UTC 2014


Use inheritance instead of ifs.
---
 source-builder/sb/reports.py | 56 ++++++++++++++++++++++++++++++++++----------
 1 file changed, 44 insertions(+), 12 deletions(-)

diff --git a/source-builder/sb/reports.py b/source-builder/sb/reports.py
index ae0cd5d..40c8beb 100644
--- a/source-builder/sb/reports.py
+++ b/source-builder/sb/reports.py
@@ -49,6 +49,41 @@ except:
     print 'error: unknown application load error'
     sys.exit(1)
 
+class formatter(object):
+    def format(self):
+        raise error.general('internal error: formatter.format() not implemented')
+
+    def ext(self):
+        raise error.general('internal error: formatter.ext() not implemented')
+
+class asciidoc_formatter(formatter):
+    def format(self):
+        return 'asciidoc'
+
+    def ext(self):
+        return '.txt'
+
+class ini_formatter(formatter):
+    def format(self):
+        return 'ini'
+
+    def ext(self):
+        return '.ini'
+
+class html_formatter(formatter):
+    def format(self):
+        return 'html'
+
+    def ext(self):
+        return '.html'
+
+class text_formatter(formatter):
+    def format(self):
+        return 'text'
+
+    def ext(self):
+        return '.txt'
+
 def _tree_name(path_):
     return path.splitext(path.basename(path_))[0]
 
@@ -65,8 +100,9 @@ class report:
 
     line_len = 78
 
-    def __init__(self, format, _configs, opts, macros = None):
-        self.format = format
+    def __init__(self, formatter, _configs, opts, macros = None):
+        self.formatter = formatter
+        self.format = formatter.format()
         self.configs = _configs
         self.opts = opts
         if macros is None:
@@ -581,8 +617,7 @@ def run(args):
             output = opts.get_arg('--output')
             if output is not None:
                 output = output[1]
-            format = 'text'
-            ext = '.txt'
+            formatter = text_formatter()
             format_opt = opts.get_arg('--format')
             if format_opt:
                 if len(format_opt) != 2:
@@ -590,20 +625,17 @@ def run(args):
                 if format_opt[1] == 'text':
                     pass
                 elif format_opt[1] == 'asciidoc':
-                    format = 'asciidoc'
-                    ext = '.txt'
+                    formatter = asciidoc_formatter()
                 elif format_opt[1] == 'html':
-                    format = 'html'
-                    ext = '.html'
+                    formatter = html_formatter()
                 elif format_opt[1] == 'ini':
-                    format = 'ini'
-                    ext = '.ini'
+                    formatter = ini_formatter()
                 else:
                     raise error.general('invalid format: %s' % (format_opt[1]))
-            r = report(format, configs, opts)
+            r = report(formatter, configs, opts)
             for _config in opts.params():
                 if output is None:
-                    outname = path.splitext(_config)[0] + ext
+                    outname = path.splitext(_config)[0] + formatter.ext()
                     outname = outname.replace('/', '-')
                 else:
                     outname = output
-- 
1.8.4.5




More information about the devel mailing list