From 3d963c1eb641e593469aa28e53db447c8f895115 Mon Sep 17 00:00:00 2001 From: Ask Solem Date: Tue, 20 May 2014 21:49:47 +0100 Subject: Removes anyjson dependency :sad: --- kombu/utils/json.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 kombu/utils/json.py (limited to 'kombu/utils/json.py') diff --git a/kombu/utils/json.py b/kombu/utils/json.py new file mode 100644 index 00000000..9dd03429 --- /dev/null +++ b/kombu/utils/json.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import, unicode_literals + +import sys + +from kombu.five import buffer_t, text_t, bytes_t + +try: + import simplejson as json +except ImportError: # pragma: no cover + import json # noqa + +IS_PY3 = sys.version_info[0] == 3 + + +class JSONEncoder(json.JSONEncoder): + + def default(self, obj, _super=json.JSONEncoder.default): + try: + _super(self, obj) + except TypeError: + try: + reducer = obj.__json__ + except AttributeError: + raise + else: + return reducer() + + +def dumps(s, _dumps=json.dumps, cls=JSONEncoder): + return _dumps(s, cls=cls) + + +def loads(s, _loads=json.loads, decode_bytes=IS_PY3): + # None of the json implementations supports decoding from + # a buffer/memoryview, or even reading from a stream + # (load is just loads(fp.read())) + # but this is Python, we love copying strings, preferably many times + # over. Note that pickle does support buffer/memoryview + # + if isinstance(s, memoryview): + s = s.tobytes().decode('utf-8') + elif isinstance(s, bytearray): + s = s.decode('utf-8') + elif decode_bytes and isinstance(s, bytes_t): + s = s.decode('utf-8') + elif isinstance(s, buffer_t): + s = text_t(s) # ... awwwwwww :( + return _loads(s) -- cgit v1.2.1 From 3d63c6762d27a094f9cbf7252102e75fc088409d Mon Sep 17 00:00:00 2001 From: Ask Solem Date: Thu, 29 May 2014 12:36:35 +0100 Subject: cosmetics --- kombu/utils/json.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'kombu/utils/json.py') diff --git a/kombu/utils/json.py b/kombu/utils/json.py index 9dd03429..a5227467 100644 --- a/kombu/utils/json.py +++ b/kombu/utils/json.py @@ -17,14 +17,11 @@ class JSONEncoder(json.JSONEncoder): def default(self, obj, _super=json.JSONEncoder.default): try: - _super(self, obj) - except TypeError: - try: - reducer = obj.__json__ - except AttributeError: - raise - else: - return reducer() + reducer = obj.__json__ + except AttributeError: + return _super(self, obj) + else: + return reducer() def dumps(s, _dumps=json.dumps, cls=JSONEncoder): -- cgit v1.2.1