models: Change serialized type marker from '__type__' to '__model__'

This commit is contained in:
Stein Magnus Jodal 2012-11-20 00:21:26 +01:00
parent 693a3d3ec6
commit 8c6f04a408
2 changed files with 16 additions and 16 deletions

View File

@ -80,7 +80,7 @@ class ImmutableObject(object):
def serialize(self):
data = {}
data['__type__'] = self.__class__.__name__
data['__model__'] = self.__class__.__name__
for key in self.__dict__.keys():
public_key = key.lstrip('_')
value = self.__dict__[key]
@ -101,7 +101,7 @@ class ModelJSONEncoder(json.JSONEncoder):
>>> import json
>>> json.dumps({'a_track': Track(name='name')}, cls=ModelJSONEncoder)
'{"a_track": {"__type__": "Track", "name": "name"}}'
'{"a_track": {"__model__": "Track", "name": "name"}}'
"""
def default(self, obj):
@ -118,14 +118,14 @@ def model_json_decoder(dct):
>>> import json
>>> json.loads(
... '{"a_track": {"__type__": "Track", "name": "name"}}',
... '{"a_track": {"__model__": "Track", "name": "name"}}',
... object_hook=model_json_decoder)
{u'a_track': Track(artists=[], name=u'name')}
"""
if '__type__' in dct:
obj_type = dct.pop('__type__')
cls = globals().get(obj_type, None)
if '__model__' in dct:
model_name = dct.pop('__model__')
cls = globals().get(model_name, None)
if issubclass(cls, ImmutableObject):
return cls(**dct)
return dct

View File

@ -93,7 +93,7 @@ class ArtistTest(unittest.TestCase):
def test_serialize(self):
self.assertDictEqual(
{'__type__': 'Artist', 'uri': 'uri', 'name': 'name'},
{'__model__': 'Artist', 'uri': 'uri', 'name': 'name'},
Artist(uri='uri', name='name').serialize())
def test_to_json_and_back(self):
@ -232,14 +232,14 @@ class AlbumTest(unittest.TestCase):
def test_serialize_without_artists(self):
self.assertDictEqual(
{'__type__': 'Album', 'uri': 'uri', 'name': 'name'},
{'__model__': 'Album', 'uri': 'uri', 'name': 'name'},
Album(uri='uri', name='name').serialize())
def test_serialize_with_artists(self):
artist = Artist(name='foo')
self.assertDictEqual(
{'__type__': 'Album', 'uri': 'uri', 'name': 'name', 'artists':
[artist.serialize()]},
{'__model__': 'Album', 'uri': 'uri', 'name': 'name',
'artists': [artist.serialize()]},
Album(uri='uri', name='name', artists=[artist]).serialize())
def test_to_json_and_back(self):
@ -430,20 +430,20 @@ class TrackTest(unittest.TestCase):
def test_serialize_without_artists(self):
self.assertDictEqual(
{'__type__': 'Track', 'uri': 'uri', 'name': 'name'},
{'__model__': 'Track', 'uri': 'uri', 'name': 'name'},
Track(uri='uri', name='name').serialize())
def test_serialize_with_artists(self):
artist = Artist(name='foo')
self.assertDictEqual(
{'__type__': 'Track', 'uri': 'uri', 'name': 'name',
{'__model__': 'Track', 'uri': 'uri', 'name': 'name',
'artists': [artist.serialize()]},
Track(uri='uri', name='name', artists=[artist]).serialize())
def test_serialize_with_album(self):
album = Album(name='foo')
self.assertDictEqual(
{'__type__': 'Track', 'uri': 'uri', 'name': 'name',
{'__model__': 'Track', 'uri': 'uri', 'name': 'name',
'album': album.serialize()},
Track(uri='uri', name='name', album=album).serialize())
@ -646,7 +646,7 @@ class TlTrackTest(unittest.TestCase):
def test_serialize(self):
track = Track(uri='uri', name='name')
self.assertDictEqual(
{'__type__': 'TlTrack', 'tlid': 123, 'track': track.serialize()},
{'__model__': 'TlTrack', 'tlid': 123, 'track': track.serialize()},
TlTrack(tlid=123, track=track).serialize())
def test_to_json_and_back(self):
@ -780,13 +780,13 @@ class PlaylistTest(unittest.TestCase):
def test_serialize_without_tracks(self):
self.assertDictEqual(
{'__type__': 'Playlist', 'uri': 'uri', 'name': 'name'},
{'__model__': 'Playlist', 'uri': 'uri', 'name': 'name'},
Playlist(uri='uri', name='name').serialize())
def test_serialize_with_tracks(self):
track = Track(name='foo')
self.assertDictEqual(
{'__type__': 'Playlist', 'uri': 'uri', 'name': 'name',
{'__model__': 'Playlist', 'uri': 'uri', 'name': 'name',
'tracks': [track.serialize()]},
Playlist(uri='uri', name='name', tracks=[track]).serialize())