Skip to content

Commit db3a92d

Browse files
committed
Added a "main" module to mimic core API
This method provides the load() and loads() methods, configuring the default transformers
1 parent 0a24bcb commit db3a92d

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

javaobj/main.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#!/usr/bin/env python3
2+
"""
3+
Mimics the core API with the new deserializer
4+
"""
5+
6+
from io import BytesIO
7+
from typing import IO, Iterable
8+
9+
from javaobj.api import ObjectTransformer
10+
from javaobj.core import JavaObjectMarshaller
11+
from javaobj.deserialize.core import JavaStreamParser
12+
from javaobj.transformers import DefaultObjectTransformer
13+
14+
# ------------------------------------------------------------------------------
15+
16+
17+
def load(file_object: IO[bytes], *transformers: ObjectTransformer, **kwargs):
18+
"""
19+
Deserializes Java primitive data and objects serialized using
20+
ObjectOutputStream from a file-like object.
21+
22+
:param file_object: A file-like object
23+
:param transformers: Custom transformers to use
24+
:return: The deserialized object
25+
"""
26+
# Ensure we have the default object transformer
27+
all_transformers = list(transformers)
28+
for t in all_transformers:
29+
if isinstance(t, DefaultObjectTransformer):
30+
break
31+
else:
32+
all_transformers.append(DefaultObjectTransformer())
33+
34+
# Parse the object(s)
35+
parser = JavaStreamParser(file_object, all_transformers)
36+
contents = parser.run()
37+
38+
if len(contents) == 1:
39+
# Return the only object as is
40+
return contents[0]
41+
42+
# Returns all objects if they are more than one
43+
return contents
44+
45+
46+
def loads(data: bytes, *transformers: ObjectTransformer, **kwargs):
47+
"""
48+
Deserializes Java objects and primitive data serialized using
49+
ObjectOutputStream from bytes.
50+
51+
:param data: A Java data string
52+
:param transformers: Custom transformers to use
53+
:param ignore_remaining_data: If True, don't log an error when unused
54+
trailing bytes are remaining
55+
:return: The deserialized object
56+
"""
57+
return load(BytesIO(data), *transformers, **kwargs)
58+
59+
60+
def dumps(obj, *transformers: ObjectTransformer):
61+
"""
62+
Serializes Java primitive data and objects unmarshaled by load(s) before
63+
into string.
64+
65+
:param obj: A Python primitive object, or one loaded using load(s)
66+
:param transformers: Custom transformers to use
67+
:return: The serialized data as a string
68+
"""
69+
marshaller = JavaObjectMarshaller()
70+
# Add custom transformers
71+
for transformer in transformers:
72+
marshaller.add_transformer(transformer)
73+
74+
return marshaller.dump(obj)

0 commit comments

Comments
 (0)