import json
from mopidy.models import immutable
[docs]
class ModelJSONEncoder(json.JSONEncoder):
"""Automatically serialize Mopidy models to JSON.
Usage::
>>> import json
>>> json.dumps({'a_track': Track(name='name')}, cls=ModelJSONEncoder)
'{"a_track": {"__model__": "Track", "name": "name"}}'
"""
def default(self, o):
if isinstance(o, immutable.ImmutableObject):
return o.serialize()
return json.JSONEncoder.default(self, o)
[docs]
def model_json_decoder(dct):
"""Automatically deserialize Mopidy models from JSON.
Usage::
>>> import json
>>> json.loads(
... '{"a_track": {"__model__": "Track", "name": "name"}}',
... object_hook=model_json_decoder)
{u'a_track': Track(artists=[], name=u'name')}
"""
if "__model__" in dct:
model_name = dct.pop("__model__")
if model_name in immutable._models:
cls = immutable._models[model_name]
return cls(**dct)
return dct