diff options
| author | LV-426 <lv-426@taproot.org.il> | 2015-01-23 02:27:17 +0200 |
|---|---|---|
| committer | LV-426 <lv-426@taproot.org.il> | 2015-01-23 03:45:49 +0200 |
| commit | 19403b1173f4c6120961a942b5c93cd7766cf6bf (patch) | |
| tree | 4709085a9d039fa275d5e153c2d45053c7edea31 /src | |
| parent | 23928ba2303123547153bbc87fe784d5c6fa3004 (diff) | |
support gzip blob compression, currently disabled due to problems with sending binary data over REST calls
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/db_op.py | 28 | ||||
| -rw-r--r-- | src/server/rz_kernel.py | 6 |
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): |
