Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion src/python/dbs/apis/dbsClient.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,26 @@
from RestClient.ProxyPlugins.Socks5Proxy import Socks5Proxy

import json
import gzip
import os
import socket
import sys
import urllib.request, urllib.parse, urllib.error

def compress(body):
"""
Compress data using gzip
"""
if isinstance(body, str):
return gzip.compress(bytes(body, 'utf-8'))
return gzip.compress(body)

def decompress(body):
"""
Decompress given data from gzip'ed format
"""
return gzip.decompress(body).decode('utf-8')

def parseStream(results):
"""
Parse given stream of results
Expand Down Expand Up @@ -333,7 +348,7 @@ def wrapper(*args, **kwargs):

class DbsApi(object):
#added CAINFO and userAgent (see github issue #431 & #432)
def __init__(self, url="", proxy=None, key=None, cert=None, verifypeer=True, debug=0, ca_info=None, userAgent="", port=8443, accept="application/json", aggregate=True):
def __init__(self, url="", proxy=None, key=None, cert=None, verifypeer=True, debug=0, ca_info=None, userAgent="", port=8443, accept="application/json", aggregate=True, useGzip=False):
"""
DbsApi Constructor

Expand Down Expand Up @@ -363,6 +378,7 @@ def __init__(self, url="", proxy=None, key=None, cert=None, verifypeer=True, deb
self.accept = accept
self.aggregate = aggregate
self.debug = debug
self.gzip = useGzip

self.rest_api = RestApi(auth=X509Auth(ssl_cert=cert, ssl_key=key, ssl_verifypeer=verifypeer, ca_info=ca_info),
proxy=Socks5Proxy(proxy_url=self.proxy) if self.proxy else None)
Expand Down Expand Up @@ -394,6 +410,9 @@ def __callServer(self, method="", params={}, data={}, callmethod='GET', content=
method_func = getattr(self.rest_api, callmethod.lower())

data = json.dumps(data)
if self.gzip and callmethod == 'POST':
request_headers['Content-Encoding'] = 'gzip'
data = compress(data)

try:
if self.debug:
Expand Down
30 changes: 30 additions & 0 deletions tests/dbsclient_t/unittests/utils_t.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
"""
various utilities unittests
"""

import os
import sys
import unittest

from dbs.apis.dbsClient import compress, decompress

class DBSClientUtils_t(unittest.TestCase):

def __init__(self, methodName='runGoTest'):
super(DBSClientUtils_t, self).__init__(methodName)

def testCompress(self):
"""test compress and decompress functions"""
data = """{"foo":1}\n{"foo":2}\n{"foo":3}\n"""
comp_data = compress(data)
orig_data = decompress(comp_data)
self.assertTrue(data == orig_data)
# test bytes input
data = b"""{"foo":1}\n{"foo":2}\n{"foo":3}\n"""
comp_data = compress(data)
orig_data = bytes(decompress(comp_data), encoding='utf-8')
self.assertTrue(data == orig_data)

if __name__ == "__main__":
SUITE = unittest.TestLoader().loadTestsFromTestCase(DBSClientUtils_t)
unittest.TextTestRunner(verbosity=2).run(SUITE)