Skip to content

Commit b6a6da3

Browse files
committed
fix: replace zlib with gzip for gzip compression
1 parent 9c3b1c2 commit b6a6da3

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

ibm_cloud_sdk_core/base_service.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from os.path import basename
2121
import platform
2222
import sys
23-
import zlib
23+
import gzip
2424
from typing import Dict, List, Optional, Tuple, Union
2525

2626
import requests
@@ -332,7 +332,7 @@ def prepare_request(self,
332332
request['data'] is not None):
333333
headers['content-encoding'] = 'gzip'
334334
uncompressed_data = request['data']
335-
request_body = zlib.compress(uncompressed_data)
335+
request_body = gzip.compress(uncompressed_data)
336336
request['data'] = request_body
337337
request['headers'] = headers
338338

test/test_base_service.py

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
import os
66
from shutil import copyfile
77
from typing import Optional
8-
import zlib
8+
import gzip
9+
import tempfile
910
import pytest
1011
import responses
1112
import requests
@@ -488,15 +489,37 @@ def test_gzip_compression():
488489
service.set_enable_gzip_compression(True)
489490
assert service.get_enable_gzip_compression()
490491
prepped = service.prepare_request('GET', url='', data=json.dumps({"foo": "bar"}))
491-
assert prepped['data'] == zlib.compress(b'{"foo": "bar"}')
492+
assert prepped['data'] == gzip.compress(b'{"foo": "bar"}')
492493
assert prepped['headers'].get('content-encoding') == 'gzip'
493494

494495
# Should return compressed data when gzip is on for non-json data
495496
assert service.get_enable_gzip_compression()
496497
prepped = service.prepare_request('GET', url='', data=b'rawdata')
497-
assert prepped['data'] == zlib.compress(b'rawdata')
498+
assert prepped['data'] == gzip.compress(b'rawdata')
498499
assert prepped['headers'].get('content-encoding') == 'gzip'
499500

501+
# Should return compressed data when gzip is on for gzip file data
502+
assert service.get_enable_gzip_compression()
503+
with tempfile.TemporaryFile(mode='w+b') as t_f:
504+
with gzip.GzipFile(mode='wb', fileobj=t_f) as gz_f:
505+
gz_f.write(json.dumps({"foo": "bar"}).encode())
506+
with gzip.GzipFile(mode='rb', fileobj=t_f) as gz_f:
507+
gzip_data = gz_f.read()
508+
prepped = service.prepare_request('GET', url='', data=gzip_data)
509+
assert prepped['data'] == gzip.compress(t_f.read())
510+
assert prepped['headers'].get('content-encoding') == 'gzip'
511+
512+
# Should return compressed json data when gzip is on for gzip file json data
513+
assert service.get_enable_gzip_compression()
514+
with tempfile.TemporaryFile(mode='w+b') as t_f:
515+
with gzip.GzipFile(mode='wb', fileobj=t_f) as gz_f:
516+
gz_f.write("rawdata".encode())
517+
with gzip.GzipFile(mode='rb', fileobj=t_f) as gz_f:
518+
gzip_data = gz_f.read()
519+
prepped = service.prepare_request('GET', url='', data=gzip_data)
520+
assert prepped['data'] == gzip.compress(t_f.read())
521+
assert prepped['headers'].get('content-encoding') == 'gzip'
522+
500523
# Should return uncompressed data when content-encoding is set
501524
assert service.get_enable_gzip_compression()
502525
prepped = service.prepare_request('GET', url='', headers={"content-encoding": "gzip"},
@@ -513,7 +536,7 @@ def test_gzip_compression_external():
513536
assert service.service_url == 'https://mockurl'
514537
assert service.get_enable_gzip_compression() is True
515538
prepped = service.prepare_request('GET', url='', data=json.dumps({"foo": "bar"}))
516-
assert prepped['data'] == zlib.compress(b'{"foo": "bar"}')
539+
assert prepped['data'] == gzip.compress(b'{"foo": "bar"}')
517540
assert prepped['headers'].get('content-encoding') == 'gzip'
518541

519542
@responses.activate

0 commit comments

Comments
 (0)