summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorLV-426 <lv-426@taproot.org.il>2015-01-23 02:27:17 +0200
committerLV-426 <lv-426@taproot.org.il>2015-01-23 03:45:49 +0200
commit19403b1173f4c6120961a942b5c93cd7766cf6bf (patch)
tree4709085a9d039fa275d5e153c2d45053c7edea31 /src/server
parent23928ba2303123547153bbc87fe784d5c6fa3004 (diff)
support gzip blob compression, currently disabled due to problems with sending binary data over REST calls
Diffstat (limited to 'src/server')
-rw-r--r--src/server/db_op.py28
-rw-r--r--src/server/rz_kernel.py6
2 files changed, 26 insertions, 8 deletions
diff --git a/src/server/db_op.py b/src/server/db_op.py
index a91cfd48..1e164030 100644
--- a/src/server/db_op.py
+++ b/src/server/db_op.py
@@ -1,9 +1,11 @@
from copy import deepcopy
from geventwebsocket.websocket import WebSocket
+import gzip
import hashlib
import json
import re
+import StringIO as sio
from model.graph import Attr_Diff
from model.graph import Topo_Diff
from model.model import Link
@@ -189,14 +191,16 @@ class DBO_block_chain__commit(DB_op):
ret = sha1.hexdigest()
return ret
- def __init__(self, blob_obj, commit_obj=None, ctx=None):
+ def __init__(self, commit_obj=None, ctx=None):
"""
@param blob_obj: serializable blob
@return: old_head, new_head, new_head.hash_value
"""
super(DBO_block_chain__commit, self).__init__()
- hash_value = DBO_block_chain__commit.calc_blob_hash(blob_obj)
+ blob = self._convert_to_blob(commit_obj)
+ hash_value = self.calc_blob_hash(blob)
+
name_value = hash_value[:8] + '...' if commit_obj == None else str(commit_obj)
l_id = generate_random_id__uuid()
@@ -209,7 +213,7 @@ class DBO_block_chain__commit(DB_op):
]
q_param_set = {'commit_attr': {
- 'blob': blob_obj,
+ 'blob': blob,
'hash': hash_value,
'id': hash_value,
'name': name_value},
@@ -219,7 +223,6 @@ class DBO_block_chain__commit(DB_op):
self.add_statement(q_arr, q_param_set)
# cache values necessary to generate op result
- self.blob_obj = blob_obj
self.commit_obj = commit_obj
self.n_id = hash_value
self.n_name_value = name_value
@@ -236,6 +239,23 @@ class DBO_block_chain__commit(DB_op):
]
self.add_statement(q_arr)
+ def _convert_to_blob(self, obj):
+ """
+ @return: blob = json.dumps(obj)
+ """
+ obj_str = json.dumps(obj)
+ # blob_gzip = self._gzip_compress_string(obj_str)
+
+ return obj_str
+
+ def _gzip_compress_string(self, input_string):
+ out = sio.StringIO()
+ with gzip.GzipFile(fileobj=out, mode='wb') as f:
+ f.write(input_string)
+
+ ret = out.getvalue()
+ return ret
+
def process_result_set(self):
"""
@return: a Topo_Diff object consisting of the commit node and parent link
diff --git a/src/server/rz_kernel.py b/src/server/rz_kernel.py
index a4280faa..4eb4083c 100644
--- a/src/server/rz_kernel.py
+++ b/src/server/rz_kernel.py
@@ -19,11 +19,9 @@ class RZ_Kernel(object):
# FIXME: clean
if isinstance(diff_obj, Topo_Diff):
- blob = json.dumps(diff_obj.to_json_dict())
- else:
- blob = json.dumps(diff_obj)
+ commit_obj = diff_obj.to_json_dict()
- chain_commit_op = DBO_block_chain__commit(blob, commit_obj=diff_obj, ctx=ctx)
+ chain_commit_op = DBO_block_chain__commit(commit_obj, ctx)
self.db_ctl.exec_op(chain_commit_op)
def diff_commit__topo(self, topo_diff, ctx=None):