jsonify test complete, approach seems to work
This commit is contained in:
parent
3e1b9acb86
commit
2665fdd5e3
@ -10,9 +10,27 @@ class A(object):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "A: {0!s} {1!s} {2!s}".format(self.arg1, self.arg2, self.arg3)
|
return "A: {0!s} {1!s} {2!s}".format(self.arg1, self.arg2, self.arg3)
|
||||||
|
|
||||||
def toJSON(self):
|
def jsonify(self):
|
||||||
return json.DUMPS({'type':self.__class__.__name__, 'args': {'arg1':self.arg1, 'arg2':self.arg2}})
|
return {'type':self.__class__.__name__, 'args': {'arg1':self.arg1, 'arg2':self.arg2}}
|
||||||
|
|
||||||
|
class MyEncoder(json.JSONEncoder):
|
||||||
|
def default(self, o):
|
||||||
|
try:
|
||||||
|
return o.jsonify()
|
||||||
|
except TypeError or AttributeError:
|
||||||
|
return super().default(o)
|
||||||
|
|
||||||
|
|
||||||
|
def objectFactory(j):
|
||||||
|
klass = eval(j['type'])
|
||||||
|
o = klass(**j['args'])
|
||||||
|
return o
|
||||||
|
|
||||||
|
def MyDecoder(j):
|
||||||
|
if type(j) == dict and 'type' in j:
|
||||||
|
return objectFactory(j)
|
||||||
|
else:
|
||||||
|
return j
|
||||||
|
|
||||||
class Tests(unittest.TestCase):
|
class Tests(unittest.TestCase):
|
||||||
def test_a1(self):
|
def test_a1(self):
|
||||||
@ -47,16 +65,39 @@ class Tests(unittest.TestCase):
|
|||||||
self.assertEqual(a3.arg2, 5)
|
self.assertEqual(a3.arg2, 5)
|
||||||
self.assertEqual(a3.arg3, 8)
|
self.assertEqual(a3.arg3, 8)
|
||||||
|
|
||||||
jjjj = json.dumps(a3)
|
jjjj = json.dumps(a3, cls=MyEncoder)
|
||||||
print(jjjj)
|
|
||||||
jj = json.loads(jjjj)
|
jjj = json.loads(jjjj)
|
||||||
klass = eval(jj['type'])
|
klass = eval(jjj['type'])
|
||||||
self.assertEqual(A, klass)
|
self.assertEqual(A, klass)
|
||||||
a3 = klass(**jj['args'])
|
a3 = klass(**jjj['args'])
|
||||||
self.assertEqual(a3.arg1, 3)
|
self.assertEqual(a3.arg1, 3)
|
||||||
self.assertEqual(a3.arg2, 5)
|
self.assertEqual(a3.arg2, 5)
|
||||||
self.assertEqual(a3.arg3, 8)
|
self.assertEqual(a3.arg3, 8)
|
||||||
|
|
||||||
|
def test_a5(self):
|
||||||
|
jList = []
|
||||||
|
jList.append(objectFactory({'type':'A', 'args': {'arg1':1, 'arg2':2}}))
|
||||||
|
jList.append(objectFactory({'type':'A', 'args': {'arg1':2, 'arg2':3}}))
|
||||||
|
jList.append(objectFactory({'type':'A', 'args': {'arg1':3, 'arg2':4}}))
|
||||||
|
|
||||||
|
js = json.dumps(jList, cls=MyEncoder, sort_keys=True, indent=4)
|
||||||
|
|
||||||
|
print(js)
|
||||||
|
|
||||||
|
jResultList = json.loads(js, object_hook=MyDecoder)
|
||||||
|
|
||||||
|
self.assertEqual(jResultList[0].arg1, 1)
|
||||||
|
self.assertEqual(jResultList[0].arg2, 2)
|
||||||
|
self.assertEqual(jResultList[0].arg3, 3)
|
||||||
|
|
||||||
|
self.assertEqual(jResultList[1].arg1, 2)
|
||||||
|
self.assertEqual(jResultList[1].arg2, 3)
|
||||||
|
self.assertEqual(jResultList[1].arg3, 5)
|
||||||
|
|
||||||
|
self.assertEqual(jResultList[2].arg1, 3)
|
||||||
|
self.assertEqual(jResultList[2].arg2, 4)
|
||||||
|
self.assertEqual(jResultList[2].arg3, 7)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user