Gracefully handle when self.observer is absent

After pickles / deepcopying etc..
This commit is contained in:
Ross Lawley 2011-11-28 05:54:03 -08:00
parent 83fff80b0f
commit 0075c0a1e8

View File

@ -1135,6 +1135,7 @@ class DataObserver(object):
self.name = name self.name = name
def updated(self): def updated(self):
if hasattr(self.instance, '_mark_as_changed'):
self.instance._mark_as_changed(self.name) self.instance._mark_as_changed(self.name)
@ -1146,6 +1147,11 @@ class BaseList(list):
self.observer = observer self.observer = observer
super(BaseList, self).__init__(list_items) super(BaseList, self).__init__(list_items)
def __getattribute__(self, name):
if name == 'observer' and not hasattr(self, 'observer'):
self.observer = DataObserver(None, None)
return super(BaseList, self).__getattribute__(name)
def __setitem__(self, *args, **kwargs): def __setitem__(self, *args, **kwargs):
self.observer.updated() self.observer.updated()
super(BaseList, self).__setitem__(*args, **kwargs) super(BaseList, self).__setitem__(*args, **kwargs)
@ -1198,6 +1204,11 @@ class BaseDict(dict):
self.observer = observer self.observer = observer
super(BaseDict, self).__init__(dict_items) super(BaseDict, self).__init__(dict_items)
def __getattribute__(self, name):
if name == 'observer' and not hasattr(self, 'observer'):
self.observer = DataObserver(None, None)
return super(BaseList, self).__getattribute__(name)
def __setitem__(self, *args, **kwargs): def __setitem__(self, *args, **kwargs):
self.observer.updated() self.observer.updated()
super(BaseDict, self).__setitem__(*args, **kwargs) super(BaseDict, self).__setitem__(*args, **kwargs)