Revision: 67253e1e7a17
Author:   Janne Härkönen <[email protected]>
Date:     Tue Dec 13 14:15:18 2011
Log:      writer: clean and consistend API for _DataFileWriter
http://code.google.com/p/robotframework/source/detail?r=67253e1e7a17

Modified:
 /src/robot/writer/writer.py

=======================================
--- /src/robot/writer/writer.py Tue Dec 13 13:43:30 2011
+++ /src/robot/writer/writer.py Tue Dec 13 14:15:18 2011
@@ -12,8 +12,6 @@
 #  See the License for the specific language governing permissions and
 #  limitations under the License.

-import re
-from StringIO import StringIO
 try:
     import csv
 except ImportError:
@@ -48,13 +46,21 @@


 class _DataFileWriter(object):
+    _formatter = None
+
+    def __init__(self, context):
+        self._output = context.output
+        self._line_separator = context.line_separator

     def write(self, datafile):
         for table in datafile:
             if table:
-                self._write_header(table)
-                self._write_rows(self._formatted_table(table))
-                self._write_empty_row()
+                self._write_table(table)
+
+    def _write_table(self, table):
+        self._write_header(table)
+        self._write_rows(self._formatted_table(table))
+        self._write_empty_row()

     def _formatted_table(self, table):
         formatter = {'setting': self._formatter.setting_rows,
@@ -70,34 +76,22 @@
     def _write_empty_row(self):
         self._write_row(self._formatter.empty_row())

-
-class _TextFileWriter(_DataFileWriter):
-
-    def __init__(self, context, formatter):
-        self._output = context.output
-        self._line_separator = context.line_separator
-        self._formatter = formatter
-
     def _write_rows(self, rows):
         for row in rows:
             self._write_row(row)


-class SpaceSeparatedTxtWriter(_TextFileWriter):
+class SpaceSeparatedTxtWriter(_DataFileWriter):
     _separator = ' '*4
-
-    def __init__(self, context):
-        _TextFileWriter.__init__(self, context, TxtFormatter())
+    _formatter = TxtFormatter()

     def _write_row(self, row):
self._output.write(self._separator.join(row) + self._line_separator)


-class PipeSeparatedTxtWriter(_TextFileWriter):
+class PipeSeparatedTxtWriter(_DataFileWriter):
     _separator = ' | '
-
-    def __init__(self, context):
-        _TextFileWriter.__init__(self, context, PipeFormatter())
+    _formatter = PipeFormatter()

     def _write_row(self, row):
         row = self._separator.join(row)
@@ -106,13 +100,14 @@
         self._output.write(row + self._line_separator)


-class TsvFileWriter(_TextFileWriter):
+class TsvFileWriter(_DataFileWriter):
+    _formatter = TsvFormatter()

     def __init__(self, context):
         if not csv:
             raise RuntimeError('No csv module found. '
'Writing tab separated format is not possible.')
-        _TextFileWriter.__init__(self, context, TsvFormatter())
+        _DataFileWriter.__init__(self, context)
         self._writer = csv.writer(context.output, dialect='excel-tab',
                                   lineterminator=context.line_separator)

@@ -121,48 +116,23 @@


 class HtmlFileWriter(_DataFileWriter):
+    _formatter = HtmlFormatter()

     def __init__(self, context):
+        _DataFileWriter.__init__(self, context)
         self._name = context.datafile.name
         self._writer = utils.HtmlWriter(context.output)
-        self._formatter = HtmlFormatter()

     def write(self, datafile):
- self._writer.content(TEMPLATE_START % {'NAME': self._name}, escape=False)
-        for table in datafile:
-            if table:
- self._writer.start('table', {'id': table.type, 'border': '1'})
-                self._write_header(table)
-                {'setting': self._write_settings,
-                 'variable': self._write_variables,
-                 'testcase': self._write_tests,
-                 'keyword': self._write_keywords
-                 }[table.type](table)
-                self._write_empty_row()
-                self._writer.end('table')
+        self._writer.content(TEMPLATE_START % {'NAME': self._name},
+                             escape=False)
+        _DataFileWriter.write(self, datafile)
         self._writer.content(TEMPLATE_END, escape=False)

-    def _write_settings(self, settings):
-        self._write_table(self._formatter.setting_rows(settings))
-
-    def _write_variables(self, variables):
-        self._write_table(self._formatter.variable_rows(variables))
-
-    def _write_tests(self, tests):
-        self._write_table(self._formatter.test_rows(tests))
-
-    def _write_keywords(self, keywords):
-        self._write_table(self._formatter.keyword_rows(keywords))
-
-    def _write_table(self, rows):
-        for row in rows:
-            self._write_row(row)
-
-    def _end_table(self, table_replacer):
-        self._write_empty_row()
-        table = self._writer.output.getvalue().decode('UTF-8')
-        self._content = table_replacer(table, self._content)
-        self._writer = utils.HtmlWriter(StringIO())
+    def _write_table(self, table):
+        self._writer.start('table', {'id': table.type, 'border': '1'})
+        _DataFileWriter._write_table(self, table)
+        self._writer.end('table')

     def _write_row(self, row):
         self._writer.start('tr')

Reply via email to