Making BaseDict / List more robust
This commit is contained in:
parent
aa5c776f3d
commit
4607b08be5
@ -1147,17 +1147,12 @@ 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._updated()
|
||||||
super(BaseList, self).__setitem__(*args, **kwargs)
|
super(BaseList, self).__setitem__(*args, **kwargs)
|
||||||
|
|
||||||
def __delitem__(self, *args, **kwargs):
|
def __delitem__(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
super(BaseList, self).__delitem__(*args, **kwargs)
|
super(BaseList, self).__delitem__(*args, **kwargs)
|
||||||
|
|
||||||
def __getstate__(self):
|
def __getstate__(self):
|
||||||
@ -1168,33 +1163,39 @@ class BaseList(list):
|
|||||||
self = state
|
self = state
|
||||||
|
|
||||||
def append(self, *args, **kwargs):
|
def append(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
return super(BaseList, self).append(*args, **kwargs)
|
return super(BaseList, self).append(*args, **kwargs)
|
||||||
|
|
||||||
def extend(self, *args, **kwargs):
|
def extend(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
return super(BaseList, self).extend(*args, **kwargs)
|
return super(BaseList, self).extend(*args, **kwargs)
|
||||||
|
|
||||||
def insert(self, *args, **kwargs):
|
def insert(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
return super(BaseList, self).insert(*args, **kwargs)
|
return super(BaseList, self).insert(*args, **kwargs)
|
||||||
|
|
||||||
def pop(self, *args, **kwargs):
|
def pop(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
return super(BaseList, self).pop(*args, **kwargs)
|
return super(BaseList, self).pop(*args, **kwargs)
|
||||||
|
|
||||||
def remove(self, *args, **kwargs):
|
def remove(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
return super(BaseList, self).remove(*args, **kwargs)
|
return super(BaseList, self).remove(*args, **kwargs)
|
||||||
|
|
||||||
def reverse(self, *args, **kwargs):
|
def reverse(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
return super(BaseList, self).reverse(*args, **kwargs)
|
return super(BaseList, self).reverse(*args, **kwargs)
|
||||||
|
|
||||||
def sort(self, *args, **kwargs):
|
def sort(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
return super(BaseList, self).sort(*args, **kwargs)
|
return super(BaseList, self).sort(*args, **kwargs)
|
||||||
|
|
||||||
|
def _updated(self):
|
||||||
|
try:
|
||||||
|
self.observer.updated()
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class BaseDict(dict):
|
class BaseDict(dict):
|
||||||
"""A special dict so we can watch any changes
|
"""A special dict so we can watch any changes
|
||||||
@ -1204,25 +1205,20 @@ 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(BaseDict, self).__getattribute__(name)
|
|
||||||
|
|
||||||
def __setitem__(self, *args, **kwargs):
|
def __setitem__(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
super(BaseDict, self).__setitem__(*args, **kwargs)
|
super(BaseDict, self).__setitem__(*args, **kwargs)
|
||||||
|
|
||||||
def __delete__(self, *args, **kwargs):
|
def __delete__(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
super(BaseDict, self).__delete__(*args, **kwargs)
|
super(BaseDict, self).__delete__(*args, **kwargs)
|
||||||
|
|
||||||
def __delitem__(self, *args, **kwargs):
|
def __delitem__(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
super(BaseDict, self).__delitem__(*args, **kwargs)
|
super(BaseDict, self).__delitem__(*args, **kwargs)
|
||||||
|
|
||||||
def __delattr__(self, *args, **kwargs):
|
def __delattr__(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
super(BaseDict, self).__delattr__(*args, **kwargs)
|
super(BaseDict, self).__delattr__(*args, **kwargs)
|
||||||
|
|
||||||
def __getstate__(self):
|
def __getstate__(self):
|
||||||
@ -1233,17 +1229,22 @@ class BaseDict(dict):
|
|||||||
self = state
|
self = state
|
||||||
|
|
||||||
def clear(self, *args, **kwargs):
|
def clear(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
super(BaseDict, self).clear(*args, **kwargs)
|
super(BaseDict, self).clear(*args, **kwargs)
|
||||||
|
|
||||||
def pop(self, *args, **kwargs):
|
def pop(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
super(BaseDict, self).clear(*args, **kwargs)
|
super(BaseDict, self).clear(*args, **kwargs)
|
||||||
|
|
||||||
def popitem(self, *args, **kwargs):
|
def popitem(self, *args, **kwargs):
|
||||||
self.observer.updated()
|
self._updated()
|
||||||
super(BaseDict, self).clear(*args, **kwargs)
|
super(BaseDict, self).clear(*args, **kwargs)
|
||||||
|
|
||||||
|
def _updated(self):
|
||||||
|
try:
|
||||||
|
self.observer.updated()
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
|
||||||
if sys.version_info < (2, 5):
|
if sys.version_info < (2, 5):
|
||||||
# Prior to Python 2.5, Exception was an old-style class
|
# Prior to Python 2.5, Exception was an old-style class
|
||||||
|
Loading…
x
Reference in New Issue
Block a user