Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu@tomeuvizoso.net>2008-01-08 17:38:55 (GMT)
committer Tomeu Vizoso <tomeu@tomeuvizoso.net>2008-01-08 17:38:55 (GMT)
commitda8a6cb15762cc886d1684c037ba3f85f26c7abc (patch)
tree05164e59a1fe580272d2d0ccfe84a78d5bd17a07
parent3f731cab480a1ee15c138c9b80f9438c9af754bd (diff)
#5707: Delete files for external properties when an entry is deleted.
-rw-r--r--src/olpc/datastore/backingstore.py13
-rw-r--r--src/olpc/datastore/model.py7
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', ]