Skip to content

Commit 00f73a9

Browse files
committed
add serializer
1 parent bd5e102 commit 00f73a9

1 file changed

Lines changed: 154 additions & 0 deletions

File tree

sjfirebase/tools/serializer.py

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
from jnius import autoclass
2+
3+
4+
def serialize_map_to_dict(hash_map):
5+
map_to_dict_data = {}
6+
7+
for key, value in zip(hash_map, hash_map.values()):
8+
if hasattr(value, "put"):
9+
map_to_dict_data[key] = serialize_map_to_dict(value)
10+
elif hasattr(value, "add"):
11+
map_to_dict_data[key] = serialize_array_to_list(value)
12+
else:
13+
map_to_dict_data[key] = value
14+
return map_to_dict_data
15+
16+
17+
def serialize_array_to_list(array):
18+
array_to_list_data = []
19+
20+
for value in array:
21+
if hasattr(value, "add"):
22+
data = serialize_array_to_list(value)
23+
array_to_list_data.append(data)
24+
elif hasattr(value, "put"):
25+
data = serialize_map_to_dict(value)
26+
array_to_list_data.append(data)
27+
else:
28+
array_to_list_data.append(value)
29+
return array_to_list_data
30+
31+
32+
def serialize_dict_to_map(dictionary):
33+
dict_to_map_data = autoclass("java.util.HashMap")()
34+
35+
for key, value in dictionary.items():
36+
if isinstance(value, dict):
37+
data = serialize_dict_to_map(value)
38+
dict_to_map_data.put(key, data)
39+
elif isinstance(value, list):
40+
data = serialize_list_to_array(value)
41+
dict_to_map_data.put(key, data)
42+
elif isinstance(value, bool):
43+
Boolean = autoclass("java.lang.Boolean")
44+
dict_to_map_data.put(key, Boolean(value))
45+
else:
46+
dict_to_map_data.put(key, value)
47+
return dict_to_map_data
48+
49+
50+
def serialize_list_to_array(list_):
51+
list_to_array_data = autoclass("java.util.ArrayList")()
52+
53+
for value in list_:
54+
if isinstance(value, list):
55+
data = serialize_list_to_array(value)
56+
list_to_array_data.add(data)
57+
elif isinstance(value, dict):
58+
data = serialize_dict_to_map(value)
59+
list_to_array_data.add(data)
60+
elif isinstance(value, bool):
61+
Boolean = autoclass("java.lang.Boolean")
62+
list_to_array_data.add(Boolean(value))
63+
elif isinstance(value, int):
64+
Long = autoclass("java.lang.Long")
65+
list_to_array_data.add(Long(value))
66+
elif isinstance(value, float):
67+
Double = autoclass("java.lang.Double")
68+
list_to_array_data.add(Double(value))
69+
elif isinstance(value, str):
70+
String = autoclass("java.lang.String")
71+
list_to_array_data.add(String(value))
72+
else:
73+
list_to_array_data.add(value)
74+
return list_to_array_data
75+
76+
77+
def serialize(data, raw_python=False):
78+
if raw_python:
79+
if not isinstance(data, list):
80+
raise Exception(f"raw `{type(data)}` serialization not supported")
81+
raw_data = []
82+
for value in data:
83+
if isinstance(value, list):
84+
data = serialize_list_to_array(value)
85+
raw_data.append(data)
86+
elif isinstance(value, dict):
87+
data = serialize_dict_to_map(value)
88+
raw_data.append(data)
89+
elif isinstance(value, bool):
90+
Boolean = autoclass("java.lang.Boolean")
91+
raw_data.append(Boolean(value))
92+
elif isinstance(value, int):
93+
Long = autoclass("java.lang.Long")
94+
raw_data.append(Long(value))
95+
elif isinstance(value, float):
96+
Double = autoclass("java.lang.Double")
97+
raw_data.append(Double(value))
98+
elif isinstance(value, str):
99+
String = autoclass("java.lang.String")
100+
raw_data.append(String(value))
101+
else:
102+
raw_data.append(value)
103+
return raw_data
104+
if isinstance(data, dict):
105+
return serialize_dict_to_map(data)
106+
if isinstance(data, list):
107+
return serialize_list_to_array(data)
108+
if hasattr(data, "add"):
109+
return serialize_array_to_list(data)
110+
if hasattr(data, "put"):
111+
return serialize_map_to_dict(data)
112+
raise Exception("data must be dict or list or java.util.HashMap or java.util.ArrayList")
113+
114+
115+
if __name__ == "__main__":
116+
# Serialize Java map to Python dictionary
117+
hm = autoclass("java.util.HashMap")()
118+
hm.put("ada", "kene")
119+
hm.put("kene", "ada")
120+
121+
bm = autoclass("java.util.HashMap")()
122+
bm.put("ken", 1)
123+
bm.put(2, 3)
124+
125+
cm = autoclass("java.util.HashMap")()
126+
127+
ar = autoclass("java.util.ArrayList")()
128+
ar.add(1)
129+
ar.add(2)
130+
ar.add(bm)
131+
# cm.put("hj", ar)
132+
#
133+
# bm.put("extras", cm)
134+
hm.put("extra", ar)
135+
print(serialize_map_to_dict(hm))
136+
137+
# Serialize Java array to Python list
138+
al = autoclass("java.util.ArrayList")()
139+
al.add(1)
140+
al.add("ada")
141+
142+
dm = autoclass("java.util.HashMap")()
143+
dm.put("ada", "kene")
144+
145+
al.add(dm)
146+
print(serialize_array_to_list(al))
147+
148+
# Serialize Python dictionary to Java map
149+
dt = {"ada": "kene", 1: [{"1": "ada"}]}
150+
print(serialize_dict_to_map(dt).get(1).get(0).get("1"))
151+
152+
# Serialize Python list to Java Array
153+
lt = [1, 2, 3, {"ada": "kene"}]
154+
print(serialize_list_to_array(lt))

0 commit comments

Comments
 (0)