Skip to content

Commit c46fc9f

Browse files
Add python code to support mappings.
1 parent 3ec01fe commit c46fc9f

6 files changed

+31
-12
lines changed

flask_platform.py

+3
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ def eval_expression():
2929
def status_endpoint():
3030
return "{}"
3131

32+
def addMapping(self, key_type, mapping_function):
33+
json_encoder.JsonSerializer.addMapping(key_type, mapping_function)
34+
3235
def _start(self):
3336
try:
3437
self.app.run(port=self.port)

json_encoder.py

+7-6
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,19 @@
22
import io
33
from PythonBridge.object_registry import registry
44

5+
mapper = {}
6+
7+
def addMapping(key_type, mapping_function):
8+
mapper[key_type] = mapping_function
9+
510
class JsonEncoder(json.JSONEncoder):
611
def __init__(self, *args, **kwargs):
712
json.JSONEncoder.__init__(self, *args, **kwargs)
8-
self.mapper = self.default_mapper()
9-
10-
def default_mapper(self):
11-
d = {}
12-
return d
13+
self.mapper = mapper
1314

1415
def default(self, obj):
1516
if type(obj) in self.mapper:
16-
return mapper[type(obj)](obj)
17+
return self.mapper[type(obj)](obj)
1718
return {
1819
'__pyclass__': type(obj).__name__,
1920
'__pyid__': registry().register(obj)

msgpack_serializer.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,23 @@
1212
memoryview,
1313
bytearray]
1414

15+
mapper = {}
16+
17+
def addMapping(key_type, mapping_function):
18+
mapper[key_type] = mapping_function
19+
1520
class MsgPackSerializer:
1621
def __init__(self):
1722
self.primitive_types = primitive_types
18-
self.mapper = self.default_mapper()
1923

20-
def default_mapper(self):
21-
d = {}
22-
return d
24+
def mapper(self):
25+
return mapper
2326

2427
def default(self, obj):
2528
if type(obj) in self.primitive_types:
2629
return obj
27-
if type(obj) in self.mapper:
28-
return mapper[type(obj)](obj)
30+
if type(obj) in self.mapper():
31+
return self.mapper()[type(obj)](obj)
2932
return {
3033
'__pyclass__': type(obj).__name__,
3134
'__pyid__': registry().register(obj)

msgpack_socket_platform.py

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ def __init__(self, port):
1919
self.packer = msgpack.Packer(use_bin_type=True)
2020
self.sync_table = {}
2121
self.async_handlers = {}
22+
23+
def addMapping(self, key_type, mapping_function):
24+
msgpack_serializer.addMapping(key_type, mapping_function)
2225

2326
def set_handler(self, msg_type, async_handler):
2427
self.async_handlers[msg_type] = async_handler

tests/test_bridge_encoder.py

+4
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ def test_encode_int(self):
2121
def test_encode_float(self):
2222
self.assert_encode_raw(5.5,'5.5')
2323

24+
def test_add_mapping(self):
25+
json_encoder.addMapping(type(self), lambda obj: 'Foooo!')
26+
self.assert_encode(self,'Foooo!')
27+
2428
def test_encode_obj(self):
2529
registry().register_with_id(self.encoder,'337')
2630
self.assert_encode(self.encoder,{'__pyclass__': "JsonEncoder", "__pyid__": '337'})

tests/test_msgpack_serializer.py

+5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import msgpack
2+
import msgpack_serializer
23
from msgpack_serializer import *
34
import unittest
45
from object_registry import registry
@@ -19,6 +20,10 @@ def test_encode_int(self):
1920

2021
def test_encode_float(self):
2122
self.assert_encode_raw(5.5, b'\xcb\x40\x16\x00\x00\x00\x00\x00\x00')
23+
24+
def test_add_mapping(self):
25+
msgpack_serializer.addMapping(type(self), lambda obj: 'Foooo!')
26+
self.assert_encode(self,'Foooo!')
2227

2328
def test_encode_obj(self):
2429
registry().register_with_id(self.serializer,'337')

0 commit comments

Comments
 (0)