Diff for /OSAS/OSA_system/OSAS_search.py between versions 1.1 and 1.2

version 1.1, 2004/07/01 19:31:25 version 1.2, 2004/07/05 21:08:55
Line 69  class OSAS_search(SimpleItem): Line 69  class OSAS_search(SimpleItem):
             metacache = self.REQUEST.SESSION['dbMeta']              metacache = self.REQUEST.SESSION['dbMeta']
             if metacache.has_key(fileid):              if metacache.has_key(fileid):
                 res = metacache[fileid]                  res = metacache[fileid]
                 print "meta from cache "                  #print "meta from cache "
                 return res                  return res
   
         curs = self.dbCursor()          curs = self.dbCursor()
Line 97  class OSAS_search(SimpleItem): Line 97  class OSAS_search(SimpleItem):
             filecache = self.REQUEST.SESSION['dbFiles']              filecache = self.REQUEST.SESSION['dbFiles']
             if filecache.has_key(fileid):              if filecache.has_key(fileid):
                 res = filecache[fileid]                  res = filecache[fileid]
                 print "file from cache "                  #print "file from cache "
                 return res                  return res
   
         curs = self.dbCursor()          curs = self.dbCursor()
Line 117  class OSAS_search(SimpleItem): Line 117  class OSAS_search(SimpleItem):
         return res          return res
           
           
     def dbSearch(self, query):      def dbSearch(self, query, type):
         """search DB for query and return result set"""          """search DB for query and return result set"""
         curs = self.dbCursor()          curs = self.dbCursor()
           if type == 'equals':
               qs = query
           elif type == 'startswith':
         qs = query + "%"          qs = query + "%"
           elif type == 'contains':
               qs = "%" + query + "%"
               
         sql = 'select fileid,idx,tags,content from meta where content like %(qs)s'          sql = 'select fileid,idx,tags,content from meta where content like %(qs)s'
         print sql, " -> ", qs          print sql, " -> ", qs
         curs.execute(sql, {'qs':qs})          curs.execute(sql, {'qs':qs})
Line 141  class OSAS_search(SimpleItem): Line 147  class OSAS_search(SimpleItem):
         curs.close()          curs.close()
         #self.dbCon = None          #self.dbCon = None
   
         print "SEARCH: ", rescnt, " results"          #print "SEARCH: ", rescnt, " results"
         return results          return results
   
                   
     def getResult(self, db_result, rank=0):      def getResult(self, db_result, rank=0):
         """factory for result objects"""          """factory for result objects"""
         print "NEW RESULT!"  
   
         (fileid, tagidx, tags, content) = db_result          (fileid, tagidx, tags, content) = db_result
         res = None          res = None
   
         print "tags: ", tags  
         if tags.find('/meta/bib/') > -1:          if tags.find('/meta/bib/') > -1:
             res = BibResult(self, db_result, rank)              res = BibResult(self, db_result, rank)
         elif tags.find('/meta/archimedes/') > -1:          elif tags.find('/meta/archimedes/') > -1:
Line 165  class OSAS_search(SimpleItem): Line 169  class OSAS_search(SimpleItem):
     def renderResult(self, result):      def renderResult(self, result):
         """returns HTML rendering of a search result"""          """returns HTML rendering of a search result"""
   
         print "renderresult!", result, " -- ", result.url  
         return result.render(self)          return result.render(self)
           
           
Line 182  class OSAS_search(SimpleItem): Line 185  class OSAS_search(SimpleItem):
         return pt()          return pt()
   
   
     def search(self, searchstring=None):      def search(self, searchstring=None, searchtype='startswith', start=1, count=10):
         """search and result"""          """search and create result"""
         if searchstring:          sres = int(start) -1
             print "SEARCH: ", searchstring          lres = sres + count
             res = self.dbSearch(searchstring)          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)              res.sort(ranksort)
               # store it
             self.REQUEST.SESSION['results'] = res              self.REQUEST.SESSION['results'] = res
             self.REQUEST.SESSION['searchstring'] = searchstring              self.REQUEST.SESSION['searchstring'] = searchstring
               self.REQUEST.SESSION['searchtype'] = searchtype
   
           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))
   
         print "SEARCH res:", res  
         pt=PageTemplateFile(os.path.join(package_home(globals()), "zpt/searchResult.zpt")).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()), "zpt/searchResult.zpt")).__of__(self)
         return pt()          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):  def manage_AddOSAS_searchForm(self):
     """create Search form"""      """create Search form"""
Line 230  class AnyResult(SearchResult): Line 320  class AnyResult(SearchResult):
     def __init__(self, zope, db_result, rank):      def __init__(self, zope, db_result, rank):
         """returns a catch-all type result"""          """returns a catch-all type result"""
         SearchResult.__init__(self, type='unknown')          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")          self.zptFile = os.path.join(package_home(globals()), "zpt/searchResult_any.zpt")
                   
Line 252  class AnyResult(SearchResult): Line 342  class AnyResult(SearchResult):
     def render(self, zope):      def render(self, zope):
         """render this result object"""          """render this result object"""
         zope.REQUEST.SESSION['result'] = self          zope.REQUEST.SESSION['result'] = self
         print "renderender...", self  
         pt=PageTemplateFile(self.zptFile).__of__(zope)          pt=PageTemplateFile(self.zptFile).__of__(zope)
         return pt()          return pt()
   
Line 263  class MetaResult(AnyResult): Line 352  class MetaResult(AnyResult):
     def __init__(self, zope, db_result, rank):      def __init__(self, zope, db_result, rank):
         """contructor"""          """contructor"""
         AnyResult.__init__(self, zope, db_result, rank)          AnyResult.__init__(self, zope, db_result, rank)
         print "NEW META RESULT!"          #print "NEW META RESULT!"
   
         (fileid, tagidx, tags, content) = db_result          (fileid, tagidx, tags, content) = db_result
   
Line 293  class BibResult(MetaResult): Line 382  class BibResult(MetaResult):
     def __init__(self, zope, db_result, rank):      def __init__(self, zope, db_result, rank):
         """constructor"""          """constructor"""
         MetaResult.__init__(self, zope, db_result, rank)          MetaResult.__init__(self, zope, db_result, rank)
         print "NEW BIB RESULT!"          #print "NEW BIB RESULT!"
         self.type = "bib"          self.type = "bib"
         self.zptFile = os.path.join(package_home(globals()), "zpt/searchResult_bib.zpt")          self.zptFile = os.path.join(package_home(globals()), "zpt/searchResult_bib.zpt")
         self.url = urlForFile(self.file)          self.url = urlForFile(self.file)
Line 343  class ArchimResult(MetaResult): Line 432  class ArchimResult(MetaResult):
     def __init__(self, zope, db_result, rank):      def __init__(self, zope, db_result, rank):
         """constructor"""          """constructor"""
         MetaResult.__init__(self, zope, db_result, rank)          MetaResult.__init__(self, zope, db_result, rank)
         print "NEW ARCHIM RESULT!"          #print "NEW ARCHIM RESULT!"
         self.type = "archim"          self.type = "archim"
         self.zptFile = os.path.join(package_home(globals()), "zpt/searchResult_archim.zpt")          self.zptFile = os.path.join(package_home(globals()), "zpt/searchResult_archim.zpt")
         self.url = urlForFile(self.file)          self.url = urlForFile(self.file)

Removed from v.1.1  
changed lines
  Added in v.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>