summaryrefslogtreecommitdiffstats
path: root/scripts/external_libs/elasticsearch/elasticsearch/serializer.py
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2017-01-22 16:20:45 +0200
committerimarom <imarom@cisco.com>2017-01-22 16:20:45 +0200
commit904eacd9be1230efb7ae0ab7997ec131b588ec8a (patch)
tree8e4bcd1b1a5f683efdb8f3eeb962acefc3201961 /scripts/external_libs/elasticsearch/elasticsearch/serializer.py
parentd2f1c8451e2e8ffc47b208f68f9b16697d706d60 (diff)
parentb81cdb6c2d6d118c1c346e7c8dae6a5e747d867d (diff)
Merge branch 'master' into capture
Signed-off-by: imarom <imarom@cisco.com> Conflicts: scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_jsonrpc_client.py scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py src/main_dpdk.cpp
Diffstat (limited to 'scripts/external_libs/elasticsearch/elasticsearch/serializer.py')
-rw-r--r--scripts/external_libs/elasticsearch/elasticsearch/serializer.py77
1 files changed, 77 insertions, 0 deletions
diff --git a/scripts/external_libs/elasticsearch/elasticsearch/serializer.py b/scripts/external_libs/elasticsearch/elasticsearch/serializer.py
new file mode 100644
index 00000000..808db714
--- /dev/null
+++ b/scripts/external_libs/elasticsearch/elasticsearch/serializer.py
@@ -0,0 +1,77 @@
+try:
+ import simplejson as json
+except ImportError:
+ import json
+import uuid
+from datetime import date, datetime
+from decimal import Decimal
+
+from .exceptions import SerializationError, ImproperlyConfigured
+from .compat import string_types
+
+class TextSerializer(object):
+ mimetype = 'text/plain'
+
+ def loads(self, s):
+ return s
+
+ def dumps(self, data):
+ if isinstance(data, string_types):
+ return data
+
+ raise SerializationError('Cannot serialize %r into text.' % data)
+
+class JSONSerializer(object):
+ mimetype = 'application/json'
+
+ def default(self, data):
+ if isinstance(data, (date, datetime)):
+ return data.isoformat()
+ elif isinstance(data, Decimal):
+ return float(data)
+ elif isinstance(data, uuid.UUID):
+ return str(data)
+ raise TypeError("Unable to serialize %r (type: %s)" % (data, type(data)))
+
+ def loads(self, s):
+ try:
+ return json.loads(s)
+ except (ValueError, TypeError) as e:
+ raise SerializationError(s, e)
+
+ def dumps(self, data):
+ # don't serialize strings
+ if isinstance(data, string_types):
+ return data
+
+ try:
+ return json.dumps(data, default=self.default, ensure_ascii=False)
+ except (ValueError, TypeError) as e:
+ raise SerializationError(data, e)
+
+DEFAULT_SERIALIZERS = {
+ JSONSerializer.mimetype: JSONSerializer(),
+ TextSerializer.mimetype: TextSerializer(),
+}
+
+class Deserializer(object):
+ def __init__(self, serializers, default_mimetype='application/json'):
+ try:
+ self.default = serializers[default_mimetype]
+ except KeyError:
+ raise ImproperlyConfigured('Cannot find default serializer (%s)' % default_mimetype)
+ self.serializers = serializers
+
+ def loads(self, s, mimetype=None):
+ if not mimetype:
+ deserializer = self.default
+ else:
+ # split out charset
+ mimetype = mimetype.split(';', 1)[0]
+ try:
+ deserializer = self.serializers[mimetype]
+ except KeyError:
+ raise SerializationError('Unknown mimetype, unable to deserialize: %s' % mimetype)
+
+ return deserializer.loads(s)
+