json encoder

This commit is contained in:
Julien Hebert 2013-02-17 21:10:21 +01:00 committed by Laurent Bachelier
commit 8d8fe9090f
2 changed files with 46 additions and 1 deletions

View file

@ -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 <http://www.gnu.org/licenses/>.
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)

View file

@ -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