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
11 changes: 8 additions & 3 deletions javaobj/v1/beans.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,9 +173,14 @@ def __hash__(self):
return UNICODE_TYPE.__hash__(self)

def __eq__(self, other):
if not isinstance(other, UNICODE_TYPE):
# Accept both UNICODE_TYPE and plain str.
# In Python 2, UNICODE_TYPE is unicode while str literals are bytes;
# including str here lets assertEqual(java_string, "literal") work
# in Python 2 as well as Python 3 (where str == UNICODE_TYPE).
if not isinstance(other, (UNICODE_TYPE, str)):
return False
return UNICODE_TYPE.__eq__(self, other)
result = UNICODE_TYPE.__eq__(self, other)
return False if result is NotImplemented else result


class JavaEnum(JavaObject):
Expand All @@ -199,7 +204,7 @@ def __init__(self, classdesc=None):
self.classdesc = classdesc

def __hash__(self):
return list.__hash__(self)
return object.__hash__(self)


class JavaByteArray(JavaObject):
Expand Down
2 changes: 1 addition & 1 deletion javaobj/v1/transformers.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ def __extra_loading__(self, unmarshaller, ident=0):
"""
# Ignore the blockdata opid
(opid,) = unmarshaller._readStruct(">B")
if opid != ClassDescFlags.SC_BLOCK_DATA:
if opid != TerminalCode.TC_BLOCKDATA:
raise ValueError("Start of block data not found")

# Read HashMap fields
Expand Down
10 changes: 6 additions & 4 deletions javaobj/v1/unmarshaller.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
# Convertion of a Java type char to its NumPy equivalent
NUMPY_TYPE_MAP = {
TypeCode.TYPE_BYTE: "B",
TypeCode.TYPE_CHAR: "b",
TypeCode.TYPE_CHAR: ">u2",
TypeCode.TYPE_DOUBLE: ">d",
TypeCode.TYPE_FLOAT: ">f",
TypeCode.TYPE_INTEGER: ">i",
Expand Down Expand Up @@ -508,7 +508,8 @@ def do_object(self, parent=None, ident=0):
# classdata[]

if (
classdesc.flags & ClassDescFlags.SC_EXTERNALIZABLE
classdesc is not None
and classdesc.flags & ClassDescFlags.SC_EXTERNALIZABLE
and not classdesc.flags & ClassDescFlags.SC_BLOCK_DATA
):
# TODO:
Expand Down Expand Up @@ -831,8 +832,9 @@ def _oops_dump_state(self, ignore_remaining_data=False):
"(2nd line is an actual position!):"
)

# Do not use a keyword argument
self.object_stream.seek(-16, os.SEEK_CUR)
# Do not use a keyword argument; clamp to avoid seeking before start
current_pos = self.object_stream.tell()
self.object_stream.seek(max(0, current_pos - 16))
position = self.object_stream.tell()
the_rest = self.object_stream.read()

Expand Down
2 changes: 1 addition & 1 deletion javaobj/v2/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ def run(self):
# Read content
contents = [] # type: List[ParsedJavaContent]
while True:
self._log.info("Reading next content")
self._log.debug("Reading next content")
start = self.__fd.tell()
try:
type_code = self.__reader.read_byte()
Expand Down
2 changes: 1 addition & 1 deletion javaobj/v2/transformers.py
Original file line number Diff line number Diff line change
Expand Up @@ -506,7 +506,7 @@ class NumpyArrayTransformer(ObjectTransformer):
# Convertion of a Java type char to its NumPy equivalent
NUMPY_TYPE_MAP = {
TypeCode.TYPE_BYTE: "B",
TypeCode.TYPE_CHAR: "b",
TypeCode.TYPE_CHAR: ">u2",
TypeCode.TYPE_DOUBLE: ">d",
TypeCode.TYPE_FLOAT: ">f",
TypeCode.TYPE_INTEGER: ">i",
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ classifiers = [
]

dependencies = [
"enum34; python_version<='3.4'",
"typing; python_version<='3.4'"
"enum34; python_version<'3.4'",
"typing; python_version<'3.5'"
]

[project.optional-dependencies]
Expand Down
6 changes: 4 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ def read(fname):
packages=["javaobj", "javaobj.v1", "javaobj.v2"],
test_suite="tests",
install_requires=[
'enum34;python_version<="3.4"',
'typing;python_version<="3.4"',
"enum34; python_version<'3.4'",
"typing; python_version<'3.5'"
],
long_description=read("README.md"),
long_description_content_type="text/markdown",
Expand All @@ -91,6 +91,8 @@ def read(fname):
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Software Development :: Libraries :: Python Modules",
],
)
18 changes: 6 additions & 12 deletions tests/test_v1.py
Original file line number Diff line number Diff line change
Expand Up @@ -337,18 +337,12 @@ def test_char_array(self):
jobj = self.read_file("testCharArray.ser")
pobj = javaobj.loads(jobj)
_logger.debug(pobj)
self.assertEqual(
pobj,
[
"\u0000",
"\ud800",
"\u0001",
"\udc00",
"\u0002",
"\uffff",
"\u0003",
],
)
# Compare by code points to avoid Python 2/3 string literal ambiguity
# (ruff strips u"" prefixes; \u-escapes in plain str are literal in Py2)
expected_codepoints = [0x0000, 0xD800, 0x0001, 0xDC00, 0x0002, 0xFFFF, 0x0003]
self.assertEqual(len(pobj), len(expected_codepoints))
for actual, cp in zip(pobj, expected_codepoints):
self.assertEqual(ord(actual), cp)
self._try_marshalling(jobj, pobj)

def test_2d_array(self):
Expand Down
18 changes: 6 additions & 12 deletions tests/test_v2.py
Original file line number Diff line number Diff line change
Expand Up @@ -417,18 +417,12 @@ def test_char_array(self):
jobj = self.read_file("testCharArray.ser")
pobj = javaobj.loads(jobj)
_logger.debug(pobj)
self.assertEqual(
pobj,
[
"\u0000",
"\ud800",
"\u0001",
"\udc00",
"\u0002",
"\uffff",
"\u0003",
],
)
# Compare by code points to avoid Python 2/3 string literal ambiguity
# (ruff strips u"" prefixes; \u-escapes in plain str are literal in Py2)
expected_codepoints = [0x0000, 0xD800, 0x0001, 0xDC00, 0x0002, 0xFFFF, 0x0003]
self.assertEqual(len(pobj), len(expected_codepoints))
for actual, cp in zip(pobj, expected_codepoints):
self.assertEqual(ord(actual), cp)

def test_2d_array(self):
"""
Expand Down
Loading