Mercurial > p > roundup > code
diff roundup/backends/blobfiles.py @ 825:0779ea9f1f18
More indexer work:
- all String properties may now be indexed too. Currently there's a bit of
"issue" specific code in the actual searching which needs to be
addressed. In a nutshell:
+ pass 'indexme="yes"' as a String() property initialisation arg, eg:
file = FileClass(db, "file", name=String(), type=String(),
comment=String(indexme="yes"))
+ the comment will then be indexed and be searchable, with the results
related back to the issue that the file is linked to
- as a result of this work, the FileClass has a default MIME type that may
be overridden in a subclass, or by the use of a "type" property as is
done in the default templates.
- the regeneration of the indexes (if necessary) is done once the schema is
set up in the dbinit.
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Tue, 09 Jul 2002 03:02:53 +0000 |
| parents | 254b8d112eec |
| children | 76c6db876c14 |
line wrap: on
line diff
--- a/roundup/backends/blobfiles.py Tue Jul 09 01:21:24 2002 +0000 +++ b/roundup/backends/blobfiles.py Tue Jul 09 03:02:53 2002 +0000 @@ -15,7 +15,7 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -#$Id: blobfiles.py,v 1.5 2002-07-08 06:58:15 richard Exp $ +#$Id: blobfiles.py,v 1.6 2002-07-09 03:02:52 richard Exp $ ''' This module exports file storage for roundup backends. Files are stored into a directory hierarchy. @@ -74,12 +74,19 @@ None, in which case the filename does not indicate which property is being saved. ''' + # determine the name of the file to write to name = self.filename(classname, nodeid, property) + + # make sure the file storage dir exists if not os.path.exists(os.path.dirname(name)): os.makedirs(os.path.dirname(name)) + + # open the temp file for writing open(name + '.tmp', 'wb').write(content) - self.transactions.append((self._doStoreFile, (name, ))) + # save off the commit action + self.transactions.append((self._doStoreFile, (classname, nodeid, + property))) def getfile(self, classname, nodeid, property): '''Get the content of the file in the database. @@ -88,6 +95,7 @@ try: return open(filename, 'rb').read() except: + # now try the temp pre-commit filename try: return open(filename+'.tmp', 'rb').read() except: @@ -101,15 +109,36 @@ files_dir = os.path.join(self.dir, 'files') return files_in_dir(files_dir) - def _doStoreFile(self, name, **databases): + def _doStoreFile(self, classname, nodeid, property, **databases): '''Store the file as part of a transaction commit. ''' + # determine the name of the file to write to + name = self.filename(classname, nodeid, property) + # the file is currently ".tmp" - move it to its real name to commit os.rename(name+".tmp", name) - self.indexer.add_file(name) - self.indexer.save_index() + + # return the classname, nodeid so we reindex this content + return (classname, nodeid) + + def _rollbackStoreFile(self, classname, nodeid, property, **databases): + '''Remove the temp file as a part of a rollback + ''' + # determine the name of the file to delete + name = self.filename(classname, nodeid, property) + if os.path.exists(name+".tmp"): + os.remove(name+".tmp") # $Log: not supported by cvs2svn $ +# Revision 1.5 2002/07/08 06:58:15 richard +# cleaned up the indexer code: +# - it splits more words out (much simpler, faster splitter) +# - removed code we'll never use (roundup.roundup_indexer has the full +# implementation, and replaces roundup.indexer) +# - only index text/plain and rfc822/message (ideas for other text formats to +# index are welcome) +# - added simple unit test for indexer. Needs more tests for regression. +# # Revision 1.4 2002/06/19 03:07:19 richard # Moved the file storage commit into blobfiles where it belongs. #
