Remote Test: fix serialization (dict, Enum)
Change-Id: Ia3f8616cbf424c7f2d29d16cf7a457be6cd1b33a Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
This commit is contained in:

committed by
Neale Ranns

parent
7c44d78ef2
commit
0b1f8a7e69
@ -10,6 +10,7 @@ import six
|
||||
from six import moves
|
||||
|
||||
from framework import VppTestCase
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class SerializableClassCopy(object):
|
||||
@ -221,7 +222,22 @@ class RemoteClass(Process):
|
||||
"""
|
||||
if self._serializable(obj):
|
||||
return obj # already serializable
|
||||
|
||||
copy = SerializableClassCopy()
|
||||
|
||||
"""
|
||||
Dictionaries can hold complex values, so we split keys and values into
|
||||
separate lists and serialize them individually.
|
||||
"""
|
||||
if (type(obj) is dict):
|
||||
copy.type = type(obj)
|
||||
copy.k_list = list()
|
||||
copy.v_list = list()
|
||||
for k, v in obj.items():
|
||||
copy.k_list.append(self._make_serializable(k))
|
||||
copy.v_list.append(self._make_serializable(v))
|
||||
return copy
|
||||
|
||||
# copy at least serializable attributes and properties
|
||||
for name, member in inspect.getmembers(obj):
|
||||
if name[0] == '_': # skip private members
|
||||
@ -245,10 +261,18 @@ class RemoteClass(Process):
|
||||
if type(obj) is tuple:
|
||||
rv = tuple(rv)
|
||||
return rv
|
||||
elif (isinstance(obj, Enum)):
|
||||
return obj.value
|
||||
else:
|
||||
return self._make_obj_serializable(obj)
|
||||
|
||||
def _deserialize_obj(self, obj):
|
||||
if (hasattr(obj, 'type')):
|
||||
if obj.type is dict:
|
||||
_obj = dict()
|
||||
for k, v in zip(obj.k_list, obj.v_list):
|
||||
_obj[self._deserialize(k)] = self._deserialize(v)
|
||||
return _obj
|
||||
return obj
|
||||
|
||||
def _deserialize(self, obj):
|
||||
|
Reference in New Issue
Block a user