diff options
author | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2008-01-08 17:38:55 (GMT) |
---|---|---|
committer | Tomeu Vizoso <tomeu@tomeuvizoso.net> | 2008-01-08 17:41:00 (GMT) |
commit | b35d2416f13eb475f4727e2f34c8b2ea31afcede (patch) | |
tree | 8a15387babc7b9679b5a3ac9990d3582f3058f32 | |
parent | 64b7f75a69f7d3dabc2acd752677af791498ba35 (diff) |
#5707: Delete files for external properties when an entry is deleted.
-rw-r--r-- | src/olpc/datastore/backingstore.py | 13 | ||||
-rw-r--r-- | src/olpc/datastore/model.py | 7 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/olpc/datastore/backingstore.py b/src/olpc/datastore/backingstore.py index 1af0088..db955e2 100644 --- a/src/olpc/datastore/backingstore.py +++ b/src/olpc/datastore/backingstore.py @@ -32,6 +32,7 @@ import gobject from olpc.datastore.xapianindex import IndexManager from olpc.datastore import bin_copy from olpc.datastore import utils +from olpc.datastore import model # changing this pattern impacts _targetFile filename_attempt_pattern = re.compile('\(\d+\)$') @@ -599,7 +600,17 @@ class FileBackingStore(BackingStore): else: self.indexmanager.index(props) + def _delete_external_properties(self, uid): + external_properties = model.defaultModel.get_external_properties() + for property_name in external_properties: + file_path = os.path.join(self.base, property_name, uid) + if os.path.exists(file_path): + logging.debug('deleting external property: %r' % file_path) + os.unlink(file_path) + def delete(self, uid, allowMissing=True): + self._delete_external_properties(uid) + self.indexmanager.delete(uid) path = self._translatePath(uid) if os.path.exists(path): @@ -888,6 +899,8 @@ class InplaceFileBackingStore(FileBackingStore): self.indexmanager.index(props, path) def delete(self, uid): + self._delete_external_properties(uid) + c = self.indexmanager.get(uid) path = c.get_property('filename', None) self.indexmanager.delete(uid) diff --git a/src/olpc/datastore/model.py b/src/olpc/datastore/model.py index bb8228a..e4a3e3b 100644 --- a/src/olpc/datastore/model.py +++ b/src/olpc/datastore/model.py @@ -170,6 +170,13 @@ class Model(object): args = self.fields[fn] addField(args[0], **args[2]) + def get_external_properties(self): + external_properties = [] + for field_name in self.fields: + field = self.fields.get(field_name) + if field[1] == "external": + external_properties.append(field[0]) + return external_properties # Properties we don't automatically include in properties dict EXCLUDED_PROPERTIES = ['fulltext', ] |