Skip to content

Commit 1a36bb4

Browse files
committed
Added support for GZip in V2
1 parent b9fa087 commit 1a36bb4

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

javaobj/v2/main.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from .api import ObjectTransformer # pylint:disable=W0611
1818
from .core import JavaStreamParser
1919
from .transformers import DefaultObjectTransformer, NumpyArrayTransformer
20+
from ..utils import java_data_fd
2021

2122
# ------------------------------------------------------------------------------
2223

@@ -40,6 +41,9 @@ def load(file_object, *transformers, **kwargs):
4041
:param transformers: Custom transformers to use
4142
:return: The deserialized object
4243
"""
44+
# Check file format (uncompress if necessary)
45+
file_object = java_data_fd(file_object)
46+
4347
# Ensure we have the default object transformer
4448
all_transformers = list(transformers)
4549
for t in all_transformers:

tests/tests_v2.py

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,6 @@
3232
from __future__ import print_function
3333

3434
# Standard library
35-
from javaobj.utils import bytes_char
36-
import javaobj.v2 as javaobj
3735
import logging
3836
import os
3937
import subprocess
@@ -47,6 +45,8 @@
4745
sys.path.insert(0, os.path.abspath(os.path.dirname(os.getcwd())))
4846

4947
# Local
48+
from javaobj.utils import bytes_char, java_data_fd
49+
import javaobj.v2 as javaobj
5050

5151
# ------------------------------------------------------------------------------
5252

@@ -247,6 +247,36 @@ def test_chars_rw(self):
247247
pobj = javaobj.loads(jobj)
248248
_logger.debug("Read char objects: %s", pobj)
249249
self.assertEqual(pobj, expected)
250+
self.assertEqual(pobj, expected.decode("latin1"))
251+
252+
def test_gzip_open(self):
253+
"""
254+
Tests if the GZip auto-uncompress works
255+
"""
256+
with java_data_fd(self.read_file("testChars.ser", stream=True)) as fd:
257+
base = fd.read()
258+
259+
with java_data_fd(
260+
self.read_file("testChars.ser.gz", stream=True)
261+
) as fd:
262+
gzipped = fd.read()
263+
264+
self.assertEqual(
265+
base, gzipped, "Uncompressed content doesn't match the original"
266+
)
267+
268+
def test_chars_gzip(self):
269+
"""
270+
Reads testChars.ser.gz
271+
"""
272+
# Expected string as a UTF-16 string
273+
expected = "python-javaobj".encode("utf-16-be")
274+
275+
jobj = self.read_file("testChars.ser.gz")
276+
pobj = javaobj.loads(jobj)
277+
_logger.debug("Read char objects: %s", pobj)
278+
self.assertEqual(pobj, expected)
279+
self.assertEqual(pobj, expected.decode("latin1"))
250280

251281
def test_double_rw(self):
252282
"""

0 commit comments

Comments
 (0)