--- OSAS/OSA_system/OSAS_search.py 2004/07/01 19:31:25 1.1 +++ OSAS/OSA_system/OSAS_search.py 2004/07/05 21:08:55 1.2 @@ -69,7 +69,7 @@ class OSAS_search(SimpleItem): metacache = self.REQUEST.SESSION['dbMeta'] if metacache.has_key(fileid): res = metacache[fileid] - print "meta from cache " + #print "meta from cache " return res curs = self.dbCursor() @@ -97,7 +97,7 @@ class OSAS_search(SimpleItem): filecache = self.REQUEST.SESSION['dbFiles'] if filecache.has_key(fileid): res = filecache[fileid] - print "file from cache " + #print "file from cache " return res curs = self.dbCursor() @@ -117,10 +117,16 @@ class OSAS_search(SimpleItem): return res - def dbSearch(self, query): + def dbSearch(self, query, type): """search DB for query and return result set""" curs = self.dbCursor() - qs = query + "%" + if type == 'equals': + qs = query + elif type == 'startswith': + qs = query + "%" + elif type == 'contains': + qs = "%" + query + "%" + sql = 'select fileid,idx,tags,content from meta where content like %(qs)s' print sql, " -> ", qs curs.execute(sql, {'qs':qs}) @@ -141,18 +147,16 @@ class OSAS_search(SimpleItem): curs.close() #self.dbCon = None - print "SEARCH: ", rescnt, " results" + #print "SEARCH: ", rescnt, " results" return results def getResult(self, db_result, rank=0): """factory for result objects""" - print "NEW RESULT!" (fileid, tagidx, tags, content) = db_result res = None - print "tags: ", tags if tags.find('/meta/bib/') > -1: res = BibResult(self, db_result, rank) elif tags.find('/meta/archimedes/') > -1: @@ -165,7 +169,6 @@ class OSAS_search(SimpleItem): def renderResult(self, result): """returns HTML rendering of a search result""" - print "renderresult!", result, " -- ", result.url return result.render(self) @@ -182,21 +185,108 @@ class OSAS_search(SimpleItem): return pt() - def search(self, searchstring=None): - """search and result""" - if searchstring: - print "SEARCH: ", searchstring - res = self.dbSearch(searchstring) + def search(self, searchstring=None, searchtype='startswith', start=1, count=10): + """search and create result""" + sres = int(start) -1 + lres = sres + count + try: + oldsearch = self.REQUEST.SESSION['searchstring'] + oldtype = self.REQUEST.SESSION['searchtype'] + except: + oldsearch = "" + oldtype = "" + + if not searchstring: + searchstring = oldsearch + searchtype = oldtype + + if not oldsearch or searchstring != oldsearch or searchtype != oldtype: + # new search + res = self.dbSearch(searchstring, searchtype) + # sort the result res.sort(ranksort) + # store it self.REQUEST.SESSION['results'] = res self.REQUEST.SESSION['searchstring'] = searchstring + self.REQUEST.SESSION['searchtype'] = searchtype - print "SEARCH res:", res + self.REQUEST.SESSION['resultgroup'] = self.REQUEST.SESSION['results'][sres:lres] + self.REQUEST.SESSION['res_indexes'] = (sres+1, lres, len(self.REQUEST.SESSION['results']), int(count)) + pt=PageTemplateFile(os.path.join(package_home(globals()), "zpt/searchResult.zpt")).__of__(self) return pt() - + + def getSearchType(self): + """returns the last search type""" + try: + ret = self.REQUEST.SESSION['searchtype'] + except: + ret = "" + + return ret + + def getSearchString(self): + """returns the last search string""" + try: + ret = self.REQUEST.SESSION['searchstring'] + except: + ret = "" + + return ret + + + def hasNextResults(self): + """returns if there are more results""" + try: + (first, last, total, count) = self.REQUEST.SESSION['res_indexes'] + return (first < total) + except: + return False + + def hasPrevResults(self): + """returns if there are previous results""" + try: + (first, last, total, count) = self.REQUEST.SESSION['res_indexes'] + return (first > 1) + except: + return False + + + def nextResults(self): + """returns more results""" + try: + (first, last, total, count) = self.REQUEST.SESSION['res_indexes'] + first = first + count + last = last + count + if first > total: + first = total + if last > total: + last = total + except: + print "OUCH: no next results: ", first, last, total, count + + return self.search(start=first, count=count) + + def prevResults(self): + """returns more results""" + try: + (first, last, total, count) = self.REQUEST.SESSION['res_indexes'] + first = first - count + last = last - count + if first < 1: + first = 1 + if last < 1: + last = 1 + except: + print "OUCH: no prev results: ", first, last, total, count + + + return self.search(start=first, count=count) + + + def manage_AddOSAS_searchForm(self): """create Search form""" pt=PageTemplateFile(os.path.join(package_home(globals()), "zpt/AddOSAS_search.zpt")).__of__(self) @@ -230,7 +320,7 @@ class AnyResult(SearchResult): def __init__(self, zope, db_result, rank): """returns a catch-all type result""" SearchResult.__init__(self, type='unknown') - print "NEW ANY RESULT!" + #print "NEW ANY RESULT!" self.zptFile = os.path.join(package_home(globals()), "zpt/searchResult_any.zpt") @@ -252,7 +342,6 @@ class AnyResult(SearchResult): def render(self, zope): """render this result object""" zope.REQUEST.SESSION['result'] = self - print "renderender...", self pt=PageTemplateFile(self.zptFile).__of__(zope) return pt() @@ -263,7 +352,7 @@ class MetaResult(AnyResult): def __init__(self, zope, db_result, rank): """contructor""" AnyResult.__init__(self, zope, db_result, rank) - print "NEW META RESULT!" + #print "NEW META RESULT!" (fileid, tagidx, tags, content) = db_result @@ -293,7 +382,7 @@ class BibResult(MetaResult): def __init__(self, zope, db_result, rank): """constructor""" MetaResult.__init__(self, zope, db_result, rank) - print "NEW BIB RESULT!" + #print "NEW BIB RESULT!" self.type = "bib" self.zptFile = os.path.join(package_home(globals()), "zpt/searchResult_bib.zpt") self.url = urlForFile(self.file) @@ -343,7 +432,7 @@ class ArchimResult(MetaResult): def __init__(self, zope, db_result, rank): """constructor""" MetaResult.__init__(self, zope, db_result, rank) - print "NEW ARCHIM RESULT!" + #print "NEW ARCHIM RESULT!" self.type = "archim" self.zptFile = os.path.join(package_home(globals()), "zpt/searchResult_archim.zpt") self.url = urlForFile(self.file)