-#!/usr/bin/env python
+#!/usr/bin/env python3
import inspect
import os
+import reprlib
import unittest
+from framework import VppTestCase
from multiprocessing import Process, Pipe
from pickle import dumps
+import sys
-import six
-from six import moves
-
-from framework import VppTestCase
-from aenum import Enum
+from enum import IntEnum, IntFlag
-class SerializableClassCopy(object):
+class SerializableClassCopy:
"""
Empty class used as a basis for a serializable copy of another class.
"""
return '<SerializableClassCopy dict=%s>' % self.__dict__
-class RemoteClassAttr(object):
+class RemoteClassAttr:
"""
Wrapper around attribute of a remotely executed class.
"""
self._pipe = Pipe() # pipe for input/output arguments
def __repr__(self):
- return moves.reprlib.repr(RemoteClassAttr(self, None))
+ return reprlib.repr(RemoteClassAttr(self, None))
def __str__(self):
return str(RemoteClassAttr(self, None))
isinstance(val, RemoteClassAttr):
mutable_args[i] = val.get_remote_value()
args = tuple(mutable_args)
- for key, val in six.iteritems(kwargs):
+ for key, val in kwargs.items():
if isinstance(val, RemoteClass) or \
isinstance(val, RemoteClassAttr):
kwargs[key] = val.get_remote_value()
def _get_local_repr(self, path):
try:
obj = self._get_local_object(path)
- return moves.reprlib.repr(obj)
+ return reprlib.repr(obj)
except AttributeError:
return None
if name[0] == '_':
if name in ['__weakref__']:
continue
+ if name in ['__dict__']:
+ continue
if not (name.startswith('__') and name.endswith('__')):
continue
if callable(member) and not isinstance(member, property):
continue
if not self._serializable(member):
- continue
+ member = self._make_serializable(member)
setattr(copy, name, member)
return copy
if type(obj) is tuple:
rv = tuple(rv)
return rv
- elif (isinstance(obj, Enum)):
+ elif (isinstance(obj, IntEnum) or isinstance(obj, IntFlag)):
return obj.value
else:
return self._make_obj_serializable(obj)