Skip to content

Instantly share code, notes, and snippets.

@dansimau
Created January 24, 2014 15:17
Show Gist options
  • Save dansimau/8599211 to your computer and use it in GitHub Desktop.
Save dansimau/8599211 to your computer and use it in GitHub Desktop.
class DirtyBase(object):
def __init__(self, *a, **k):
super(DirtyBase, self).__init__(*a, **k)
self.dirty = False
def __setitem__(self, *a, **k):
self.mark_dirty()
super(DirtyBase, self).__setitem__(*a, **k)
def __delitem__(self, *a, **k):
self.mark_dirty()
super(DirtyBase, self).__delitem__(*a, **k)
def mark_clean(self):
self.dirty = False
def mark_dirty(self):
self.dirty = True
class DirtyDict(DirtyBase, dict):
def clear(self, *a, **k):
self.mark_dirty()
super(DirtyDict, self).clear(*a, **k)
def pop(self, *a, **k):
self.mark_dirty()
super(DirtyDict, self).pop(*a, **k)
def popitem(self, *a, **k):
self.mark_dirty()
super(DirtyDict, self).popitem(*a, **k)
def setdefault(self, *a, **k):
self.mark_dirty()
super(DirtyDict, self).setdefault(*a, **k)
def update(self, *a, **k):
self.mark_dirty()
super(DirtyDict, self).update(*a, **k)
class DirtyList(DirtyBase, list):
def append(self, *a, **k):
self.mark_dirty()
super(DirtyList, self).append(*a, **k)
def extend(self, *a, **k):
self.mark_dirty()
super(DirtyList, self).extend(*a, **k)
def insert(self, *a, **k):
self.mark_dirty()
super(DirtyList, self).insert(*a, **k)
def remove(self, *a, **k):
self.mark_dirty()
super(DirtyList, self).remove(*a, **k)
def pop(self, *a, **k):
self.mark_dirty()
super(DirtyList, self).pop(*a, **k)
def sort(self, *a, **k):
self.mark_dirty()
super(DirtyList, self).sort(*a, **k)
def reverse(self, *a, **k):
self.mark_dirty()
super(DirtyList, self).reverse(*a, **k)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment