diff --git a/weboob/tools/application/formatters/json.py b/weboob/tools/application/formatters/json.py new file mode 100644 index 00000000..f7354a89 --- /dev/null +++ b/weboob/tools/application/formatters/json.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- + +# Copyright(C) 2013 Julien Hebert +# +# This file is part of weboob. +# +# weboob is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# weboob is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with weboob. If not, see . + + +from .iformatter import IFormatter +from weboob.tools.json import json +__all__ = ['JsonFormatter'] + +class Encoder(json.JSONEncoder): + "generic weboob objects encoder" + def default(self, obj): + try : + return json.JSONEncoder.default(self, obj) + except TypeError: + i = IFormatter() + try : + dico = i.to_dict(obj) + except TypeError: + return str(obj) + for z in dico: + return z + + +class JsonFormatter(IFormatter): + def format_dict(self, item): + return json.dumps(item, cls=Encoder) diff --git a/weboob/tools/application/formatters/load.py b/weboob/tools/application/formatters/load.py index 05aacb7d..3bc544ab 100644 --- a/weboob/tools/application/formatters/load.py +++ b/weboob/tools/application/formatters/load.py @@ -25,7 +25,7 @@ class FormatterLoadError(Exception): pass class FormattersLoader(object): - BUILTINS = ['htmltable', 'multiline', 'simple', 'table', 'csv', 'webkit'] + BUILTINS = ['htmltable', 'multiline', 'simple', 'table', 'csv', 'webkit', 'json'] def __init__(self): self.formatters = {} @@ -71,3 +71,6 @@ class FormattersLoader(object): elif name == 'csv': from .csv import CSVFormatter return CSVFormatter + elif name == 'json': + from .json import JsonFormatter + return JsonFormatter