From 8875fad43937aa329e91bb472df2f3a539355a3d Mon Sep 17 00:00:00 2001 From: Oleg Plakhotniuk Date: Fri, 20 Jun 2014 15:31:44 -0500 Subject: [PATCH] Table and Json formatters can write output to a file now. Signed-off-by: Oleg Plakhotniuk closes #1412 --- setup.cfg | 6 +++++- .../tools/application/formatters/iformatter.py | 17 +++++++++++++++++ weboob/tools/application/formatters/json.py | 11 +++++++---- weboob/tools/application/formatters/table.py | 13 ++++++++++--- 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/setup.cfg b/setup.cfg index ff1ce8c8c5..159efe3db4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -3,4 +3,8 @@ verbosity = 2 detailed-errors = 1 with-doctest = 1 where = weboob -tests = weboob.tools.capabilities.paste,weboob.tools.path,weboob.capabilities.bank +tests = weboob.capabilities.bank, + weboob.tools.capabilities.paste, + weboob.tools.application.formatters.json, + weboob.tools.application.formatters.table, + weboob.tools.path diff --git a/weboob/tools/application/formatters/iformatter.py b/weboob/tools/application/formatters/iformatter.py index a6e7837da8..6f5becadae 100644 --- a/weboob/tools/application/formatters/iformatter.py +++ b/weboob/tools/application/formatters/iformatter.py @@ -229,3 +229,20 @@ def get_title(self, obj): def get_description(self, obj): return None + +def formatter_test_output(Formatter, obj): + """ + Formats an object and returns output as a string. + For test purposes only. + """ + from tempfile import mkstemp + from os import remove + _, name = mkstemp() + fmt = Formatter() + fmt.outfile = name + fmt.format(obj) + fmt.flush() + with open(name) as f: + res = f.read() + remove(name) + return res diff --git a/weboob/tools/application/formatters/json.py b/weboob/tools/application/formatters/json.py index e1334ab308..b4800cede4 100644 --- a/weboob/tools/application/formatters/json.py +++ b/weboob/tools/application/formatters/json.py @@ -18,8 +18,6 @@ # along with weboob. If not, see . -from __future__ import print_function - from weboob.capabilities.base import NotAvailable, NotLoaded from weboob.tools.json import json @@ -54,7 +52,7 @@ def __init__(self): self.queue = [] def flush(self): - print(json.dumps(self.queue, cls=Encoder)) + self.output(json.dumps(self.queue, cls=Encoder)) def format_dict(self, item): self.queue.append(item) @@ -66,4 +64,9 @@ class JsonLineFormatter(IFormatter): The advantage is that it can be streamed. """ def format_dict(self, item): - print(json.dumps(item, cls=Encoder)) + self.output(json.dumps(item, cls=Encoder)) + +def test(): + from .iformatter import formatter_test_output as fmt + assert fmt(JsonFormatter, {'foo': 'bar'}) == '[{"foo": "bar"}]\n' + assert fmt(JsonLineFormatter, {'foo': 'bar'}) == '{"foo": "bar"}\n' diff --git a/weboob/tools/application/formatters/table.py b/weboob/tools/application/formatters/table.py index 68949e24d8..81322d8780 100644 --- a/weboob/tools/application/formatters/table.py +++ b/weboob/tools/application/formatters/table.py @@ -18,8 +18,6 @@ # along with weboob. If not, see . -from __future__ import print_function - from prettytable import PrettyTable from weboob.capabilities.base import empty @@ -42,7 +40,7 @@ def __init__(self): def flush(self): s = self.get_formatted_table() if s is not None: - print(s.encode('utf-8')) + self.output(s.encode('utf-8')) def get_formatted_table(self): if len(self.queue) == 0: @@ -101,3 +99,12 @@ def set_header(self, string): class HTMLTableFormatter(TableFormatter): HTML = True + +def test(): + from .iformatter import formatter_test_output as fmt + assert fmt(TableFormatter, {'foo': 'bar'}) == \ + '+-----+\n' \ + '| Foo |\n' \ + '+-----+\n' \ + '| bar |\n' \ + '+-----+\n' -- GitLab