Making BaseDict / List more robust

This commit is contained in:
Ross Lawley 2011-11-28 06:35:19 -08:00
parent aa5c776f3d
commit 4607b08be5

View File

@ -1147,17 +1147,12 @@ class BaseList(list):
self.observer = observer
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):
self.observer.updated()
self._updated()
super(BaseList, self).__setitem__(*args, **kwargs)
def __delitem__(self, *args, **kwargs):
self.observer.updated()
self._updated()
super(BaseList, self).__delitem__(*args, **kwargs)
def __getstate__(self):
@ -1168,33 +1163,39 @@ class BaseList(list):
self = state
def append(self, *args, **kwargs):
self.observer.updated()
self._updated()
return super(BaseList, self).append(*args, **kwargs)
def extend(self, *args, **kwargs):
self.observer.updated()
self._updated()
return super(BaseList, self).extend(*args, **kwargs)
def insert(self, *args, **kwargs):
self.observer.updated()
self._updated()
return super(BaseList, self).insert(*args, **kwargs)
def pop(self, *args, **kwargs):
self.observer.updated()
self._updated()
return super(BaseList, self).pop(*args, **kwargs)
def remove(self, *args, **kwargs):
self.observer.updated()
self._updated()
return super(BaseList, self).remove(*args, **kwargs)
def reverse(self, *args, **kwargs):
self.observer.updated()
self._updated()
return super(BaseList, self).reverse(*args, **kwargs)
def sort(self, *args, **kwargs):
self.observer.updated()
self._updated()
return super(BaseList, self).sort(*args, **kwargs)
def _updated(self):
try:
self.observer.updated()
except AttributeError:
pass
class BaseDict(dict):
"""A special dict so we can watch any changes
@ -1204,25 +1205,20 @@ class BaseDict(dict):
self.observer = observer
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(BaseDict, self).__getattribute__(name)
def __setitem__(self, *args, **kwargs):
self.observer.updated()
self._updated()
super(BaseDict, self).__setitem__(*args, **kwargs)
def __delete__(self, *args, **kwargs):
self.observer.updated()
self._updated()
super(BaseDict, self).__delete__(*args, **kwargs)
def __delitem__(self, *args, **kwargs):
self.observer.updated()
self._updated()
super(BaseDict, self).__delitem__(*args, **kwargs)
def __delattr__(self, *args, **kwargs):
self.observer.updated()
self._updated()
super(BaseDict, self).__delattr__(*args, **kwargs)
def __getstate__(self):
@ -1233,17 +1229,22 @@ class BaseDict(dict):
self = state
def clear(self, *args, **kwargs):
self.observer.updated()
self._updated()
super(BaseDict, self).clear(*args, **kwargs)
def pop(self, *args, **kwargs):
self.observer.updated()
self._updated()
super(BaseDict, self).clear(*args, **kwargs)
def popitem(self, *args, **kwargs):
self.observer.updated()
self._updated()
super(BaseDict, self).clear(*args, **kwargs)
def _updated(self):
try:
self.observer.updated()
except AttributeError:
pass
if sys.version_info < (2, 5):
# Prior to Python 2.5, Exception was an old-style class