Mercurial > p > roundup > code
view roundup/roundup_indexer.py @ 752:a721f4e7ebbc
Installation note for people running the tests with a CVS checkout.
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Tue, 28 May 2002 11:52:08 +0000 |
| parents | 51c425129b35 |
| children |
line wrap: on
line source
# # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) # This module is free software, and you may redistribute it and/or modify # under the same terms as Python, so long as this copyright message and # disclaimer are retained in their original form. # # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # #$Id: roundup_indexer.py,v 1.2 2002-05-25 07:16:24 rochecompaan Exp $ ''' This module provides an indexer class, RoundupIndexer, that stores text indices in a roundup instance. This class makes searching the content of messages and text files possible. ''' import os from roundup.indexer import SlicedZPickleIndexer class RoundupIndexer(SlicedZPickleIndexer): ''' Indexes messages and files ''' def __init__(self, db_path): indexdb_path = os.path.join(db_path, 'indexes') index_exists = 0 if not os.path.exists(indexdb_path): os.makedirs(indexdb_path) os.chmod(indexdb_path, 0775) else: index_exists = 1 index_path = os.path.join(indexdb_path, 'index.db') SlicedZPickleIndexer.__init__(self, INDEXDB=index_path, QUIET=9) files_path = os.path.join(db_path, 'files') if not index_exists: self.add_files(dir=files_path) self.save_index() def search(self, search_terms, klass): ''' display search results ''' hits = self.find(search_terms) links = [] nodeids = {} designator_propname = {'msg': 'messages', 'file': 'files'} if hits: hitcount = len(hits) # build a dictionary of nodes and their associated messages # and files for hit in hits.keys(): filename = hits[hit].split('/')[-1] for designator, propname in designator_propname.items(): if filename.find(designator) == -1: continue nodeid = filename[len(designator):] result = apply(klass.find, (), {propname:nodeid}) if not result: continue id = str(result[0]) if not nodeids.has_key(id): nodeids[id] = {} node_dict = nodeids[id] if not node_dict.has_key(propname): node_dict[propname] = [nodeid] elif node_dict.has_key(propname): node_dict[propname].append(nodeid) return nodeids # #$Log: not supported by cvs2svn $ #Revision 1.1.2.3 2002/05/02 11:52:12 rochecompaan #Fixed small bug that prevented indexes from being generated. # #Revision 1.1.2.2 2002/04/19 19:54:42 rochecompaan #cgi_client.py # removed search link for the time being # moved rendering of matches to htmltemplate #hyperdb.py # filtering of nodes on full text search incorporated in filter method #roundupdb.py # added paramater to call of filter method #roundup_indexer.py # added search method to RoundupIndexer class # #Revision 1.1.2.1 2002/04/03 11:55:57 rochecompaan # . Added feature #526730 - search for messages capability #
