Mercurial > treepkg > treepkg
comparison treepkg/status.py @ 464:5fda6768bef6
Enable a status_hook to be set and executed on status changes
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Thu, 09 Sep 2010 14:26:35 +0000 |
parents | 27824d3add92 |
children |
comparison
equal
deleted
inserted
replaced
463:52f841330c16 | 464:5fda6768bef6 |
---|---|
119 # Overwrite in derived classes with a different magic string | 119 # Overwrite in derived classes with a different magic string |
120 _magic = "Status 0.0\n" | 120 _magic = "Status 0.0\n" |
121 | 121 |
122 # Derived classes may extend a copy of this set with more instance | 122 # Derived classes may extend a copy of this set with more instance |
123 # variables. | 123 # variables. |
124 _attrs = set(["_filename", "_values"]) | 124 _attrs = set(["_filename", "_values", "_after_setattr"]) |
125 | 125 |
126 def __init__(self, filename): | 126 def __init__(self, filename, after_setattr=None): |
127 self._values = dict() | 127 self._values = dict() |
128 self._filename = filename | 128 self._filename = filename |
129 self._after_setattr = after_setattr | |
129 if self._filename is not None: | 130 if self._filename is not None: |
130 assert os.path.isabs(self._filename) | 131 assert os.path.isabs(self._filename) |
131 self.read() | 132 self.read() |
132 | 133 |
133 def deserialize(self, iter_lines, filename=None): | 134 def deserialize(self, iter_lines, filename=None): |
176 | 177 |
177 def __setattr__(self, attr, value): | 178 def __setattr__(self, attr, value): |
178 if attr in self._fields: | 179 if attr in self._fields: |
179 self._values[attr] = value | 180 self._values[attr] = value |
180 self.write() | 181 self.write() |
182 if self._after_setattr is not None: | |
183 self._after_setattr(self, attr) | |
181 elif attr in self._attrs: | 184 elif attr in self._attrs: |
182 self.__dict__[attr] = value | 185 self.__dict__[attr] = value |
183 else: | 186 else: |
184 raise AttributeError(attr) | 187 raise AttributeError(attr) |
185 | 188 |