From 6a90ec6c94beee949fb847513d4b72d382127dd2 Mon Sep 17 00:00:00 2001 From: Benjamin Saller Date: Mon, 30 Jul 2007 20:47:38 +0000 Subject: fix #2559 --- diff --git a/src/olpc/datastore/backingstore.py b/src/olpc/datastore/backingstore.py index 57bd787..724e7cc 100644 --- a/src/olpc/datastore/backingstore.py +++ b/src/olpc/datastore/backingstore.py @@ -339,6 +339,7 @@ class FileBackingStore(BackingStore): return content def _writeContent(self, uid, filelike, replace=True, target=None): + content = None if target: path = target else: path = self._translatePath(uid) @@ -359,9 +360,10 @@ class FileBackingStore(BackingStore): fp.close() else: bin_copy.bin_copy(filelike.name, path) - if verify: - content = self.indexmanager.get(uid) - content.checksum = c.hexdigest() +## if verify: +## if not content: +## content = self.indexmanager.get(uid) +## content.checksum = c.hexdigest() def _checksum(self, filename): c = sha.sha() @@ -538,7 +540,7 @@ class InplaceFileBackingStore(FileBackingStore): def create(self, props, filelike): # the file would have already been changed inplace # don't touch it - uid = self.indexmanager.index(props, filelike) + proposed_name = None if filelike: if isinstance(filelike, basestring): # lets treat it as a filename @@ -551,9 +553,14 @@ class InplaceFileBackingStore(FileBackingStore): proposed_name = props.get('filename', None) if not proposed_name: proposed_name = os.path.split(filelike.name)[1] + # record the name before qualifying it to the store + props['filename'] = proposed_name proposed_name = os.path.join(self.uri, proposed_name) - if not os.path.exists(proposed_name): - self._writeContent(uid, filelike, replace=False, target=proposed_name) + + uid = self.indexmanager.index(props, filelike) + + if proposed_name and not os.path.exists(proposed_name): + self._writeContent(uid, filelike, replace=False, target=proposed_name) return uid diff --git a/src/olpc/datastore/model.py b/src/olpc/datastore/model.py index a867c2f..14bb4b9 100644 --- a/src/olpc/datastore/model.py +++ b/src/olpc/datastore/model.py @@ -240,6 +240,8 @@ class Content(object): mt = self.get_property('mime_type', None) if mt: ext = mimetypes.guess_extension(mt) + # .ksh is a strange ext for plain text + if ext and ext == '.ksh': ext = '.txt' if ext: return None, ext return None, None diff --git a/src/olpc/datastore/xapianindex.py b/src/olpc/datastore/xapianindex.py index ce09c62..d46e0c7 100644 --- a/src/olpc/datastore/xapianindex.py +++ b/src/olpc/datastore/xapianindex.py @@ -183,8 +183,10 @@ class IndexManager(object): # done in the thread to keep things async and # latency lower. # we know that there is filestuff or it - # wouldn't have been queued + # wouldn't have been queued filename, mimetype = filestuff + if isinstance(filename, file): + filename = filename.name fp = converter(filename, mimetype) if fp: # read in at a fixed block size, try to -- cgit v0.9.1