From da8a6cb15762cc886d1684c037ba3f85f26c7abc Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Tue, 08 Jan 2008 17:38:55 +0000 Subject: #5707: Delete files for external properties when an entry is deleted. --- 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', ] -- cgit v0.9.1