diff --git a/mopidy/models.py b/mopidy/models.py index 129c9ba8..ef60ebbe 100644 --- a/mopidy/models.py +++ b/mopidy/models.py @@ -21,6 +21,17 @@ class ImmutableObject(object): return super(ImmutableObject, self).__setattr__(name, value) raise AttributeError('Object is immutable.') + def __repr__(self): + kwarg_pairs = [] + for (key, value) in sorted(self.__dict__.items()): + if isinstance(value, (frozenset, tuple)): + value = list(value) + kwarg_pairs.append('%s=%s' % (key, repr(value))) + return '%(classname)s(%(kwargs)s)' % { + 'classname': self.__class__.__name__, + 'kwargs': ', '.join(kwarg_pairs), + } + def __hash__(self): hash_sum = 0 for key, value in self.__dict__.items(): diff --git a/tests/models_test.py b/tests/models_test.py index 101ba877..9657c562 100644 --- a/tests/models_test.py +++ b/tests/models_test.py @@ -73,6 +73,11 @@ class ArtistTest(unittest.TestCase): test = lambda: Artist(foo='baz') self.assertRaises(TypeError, test) + def test_repr(self): + self.assertEquals( + "Artist(name='name', uri='uri')", + repr(Artist(uri='uri', name='name'))) + def test_eq_name(self): artist1 = Artist(name=u'name') artist2 = Artist(name=u'name') @@ -164,6 +169,16 @@ class AlbumTest(unittest.TestCase): test = lambda: Album(foo='baz') self.assertRaises(TypeError, test) + def test_repr_without_artists(self): + self.assertEquals( + "Album(artists=[], name='name', uri='uri')", + repr(Album(uri='uri', name='name'))) + + def test_repr_with_artists(self): + self.assertEquals( + "Album(artists=[Artist(name='foo')], name='name', uri='uri')", + repr(Album(uri='uri', name='name', artists=[Artist(name='foo')]))) + def test_eq_name(self): album1 = Album(name=u'name') album2 = Album(name=u'name') @@ -319,6 +334,16 @@ class TrackTest(unittest.TestCase): test = lambda: Track(foo='baz') self.assertRaises(TypeError, test) + def test_repr_without_artists(self): + self.assertEquals( + "Track(artists=[], name='name', uri='uri')", + repr(Track(uri='uri', name='name'))) + + def test_repr_with_artists(self): + self.assertEquals( + "Track(artists=[Artist(name='foo')], name='name', uri='uri')", + repr(Track(uri='uri', name='name', artists=[Artist(name='foo')]))) + def test_eq_uri(self): track1 = Track(uri=u'uri1') track2 = Track(uri=u'uri1') @@ -551,6 +576,17 @@ class PlaylistTest(unittest.TestCase): test = lambda: Playlist(foo='baz') self.assertRaises(TypeError, test) + def test_repr_without_tracks(self): + self.assertEquals( + "Playlist(name='name', tracks=[], uri='uri')", + repr(Playlist(uri='uri', name='name'))) + + def test_repr_with_tracks(self): + self.assertEquals( + "Playlist(name='name', tracks=[Track(artists=[], name='foo')], " + "uri='uri')", + repr(Playlist(uri='uri', name='name', tracks=[Track(name='foo')]))) + def test_eq(self): # FIXME missing all equal and hash tests raise SkipTest