From b0b5d4972f756cb2b4128837234f488d371e3910 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Wed, 15 Jan 2014 19:39:11 +0100 Subject: [PATCH] models: Make .copy(foo=None) null out field. --- mopidy/models.py | 8 ++++++-- tests/test_models.py | 4 ++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/mopidy/models.py b/mopidy/models.py index ed371f23..aab69a3f 100644 --- a/mopidy/models.py +++ b/mopidy/models.py @@ -69,10 +69,14 @@ class ImmutableObject(object): data = {} for key in self.__dict__.keys(): public_key = key.lstrip('_') - data[public_key] = values.pop(public_key, self.__dict__[key]) + value = values.pop(public_key, self.__dict__[key]) + if value is not None: + data[public_key] = value for key in values.keys(): if hasattr(self, key): - data[key] = values.pop(key) + value = values.pop(key) + if value is not None: + data[key] = value if values: raise TypeError( 'copy() got an unexpected keyword argument "%s"' % key) diff --git a/tests/test_models.py b/tests/test_models.py index 02cba8f4..5872e0e6 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -53,6 +53,10 @@ class GenericCopyTest(unittest.TestCase): test = lambda: Track().copy(invalid_key=True) self.assertRaises(TypeError, test) + def test_copying_track_to_remove(self): + track = Track(name='foo').copy(name=None) + self.assertEquals(track.__dict__, Track().__dict__) + class RefTest(unittest.TestCase): def test_uri(self):