Mercurial > kallithea
changeset 2152:e14ae8437548 beta
extended JSON encoder to use __json__ method if available
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 21 Mar 2012 21:54:30 +0200 |
parents | 12ceeda33339 |
children | fa637dc3e029 |
files | rhodecode/lib/compat.py rhodecode/model/db.py |
diffstat | 2 files changed, 16 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/rhodecode/lib/compat.py Wed Mar 21 21:00:55 2012 +0200 +++ b/rhodecode/lib/compat.py Wed Mar 21 21:54:30 2012 +0200 @@ -34,7 +34,12 @@ #============================================================================== -def __obj_dump(obj): +def _obj_dump(obj): + """ + Custom function for dumping objects to JSON + + :param obj: + """ DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%S" DATE_FORMAT = "%Y-%m-%d" if isinstance(obj, complex): @@ -47,6 +52,11 @@ return list(obj) elif isinstance(obj, OrderedDict): return obj.as_dict() + elif hasattr(obj, '__json__'): + if callable(obj.__json__): + return obj.__json__() + else: + return obj.__json__ else: raise NotImplementedError @@ -57,7 +67,7 @@ class ExtendedEncoder(json.JSONEncoder): def default(self, obj): try: - return __obj_dump(obj) + return _obj_dump(obj) except NotImplementedError: pass return json.JSONEncoder.default(self, obj) @@ -68,7 +78,7 @@ def extended_encode(obj): try: - return __obj_dump(obj) + return _obj_dump(obj) except NotImplementedError: pass raise TypeError("%r is not JSON serializable" % (obj,))
--- a/rhodecode/model/db.py Wed Mar 21 21:00:55 2012 +0200 +++ b/rhodecode/model/db.py Wed Mar 21 21:54:30 2012 +0200 @@ -381,6 +381,9 @@ def __json__(self): return dict( + user_id=self.user_id, + first_name=self.name, + last_name=self.lastname, email=self.email, full_name=self.full_name, full_name_or_username=self.full_name_or_username,