##// END OF EJS Templates
authentication: introduce a group sync flag for plugins....
authentication: introduce a group sync flag for plugins. - we'll skip any syncing on plugins which simply don't get any group information - we let plugins define if they wish to sync groups - prevent from odd cases in which someone sets user groups as syncing, and using regular plugin. In this case memebership of that group would be wiped, and it's generaly bad behaviour.

File last commit:

r2358:d7106a21 default
r2495:4f076134 default
Show More
ext_json.py
64 lines | 1.8 KiB | text/x-python | PythonLexer
import datetime
import decimal
import functools
import simplejson as json
from rhodecode.lib.datelib import is_aware
try:
import rhodecode.translation
except ImportError:
rhodecode = None
__all__ = ['json']
def _obj_dump(obj):
"""
Custom function for dumping objects to JSON, if obj has __json__ attribute
or method defined it will be used for serialization
:param obj:
"""
# See "Date Time String Format" in the ECMA-262 specification.
# some code borrowed from django 1.4
if isinstance(obj, set):
return list(obj)
elif isinstance(obj, datetime.datetime):
r = obj.isoformat()
if isinstance(obj.microsecond, (int, long)):
r = r[:23] + r[26:]
if r.endswith('+00:00'):
r = r[:-6] + 'Z'
return r
elif isinstance(obj, datetime.date):
return obj.isoformat()
elif isinstance(obj, datetime.time):
if is_aware(obj):
raise TypeError("Time-zone aware times are not JSON serializable")
r = obj.isoformat()
if isinstance(obj.microsecond, (int, long)):
r = r[:12]
return r
elif hasattr(obj, '__json__'):
if callable(obj.__json__):
return obj.__json__()
else:
return obj.__json__
elif isinstance(obj, decimal.Decimal):
return str(obj)
elif isinstance(obj, complex):
return [obj.real, obj.imag]
elif rhodecode and isinstance(obj, rhodecode.translation._LazyString):
return obj.eval()
else:
raise TypeError(repr(obj) + " is not JSON serializable")
json.dumps = functools.partial(json.dumps, default=_obj_dump, use_decimal=False)
json.dump = functools.partial(json.dump, default=_obj_dump, use_decimal=False)
# alias for formatted json
formatted_json = functools.partial(json.dumps, indent=4, sort_keys=True)