[Checkins] SVN: z3c.searchfilter/trunk/src/z3c/searchfilter/ As with srichter discussed.

Roger Ineichen roger at projekt01.ch
Fri Mar 9 19:23:28 EST 2007


Log message for revision 73133:
  As with srichter discussed.
  
  Note, work is in progress and the API can get 
  changed again till we have tests.

Changed:
  U   z3c.searchfilter/trunk/src/z3c/searchfilter/browser.py
  U   z3c.searchfilter/trunk/src/z3c/searchfilter/criterium.py
  U   z3c.searchfilter/trunk/src/z3c/searchfilter/interfaces.py

-=-
Modified: z3c.searchfilter/trunk/src/z3c/searchfilter/browser.py
===================================================================
--- z3c.searchfilter/trunk/src/z3c/searchfilter/browser.py	2007-03-09 21:27:51 UTC (rev 73132)
+++ z3c.searchfilter/trunk/src/z3c/searchfilter/browser.py	2007-03-10 00:23:27 UTC (rev 73133)
@@ -64,20 +64,20 @@
         interfaces.IFullTextCriterium).select('value')
 
 
-class Filter(form.SubPageForm):
+class SearchFilterForm(form.SubPageForm):
 
     prefix = 'filters.'
-    form_fields = form.FormFields(interfaces.ISearchCriteria)
+    form_fields = form.FormFields(interfaces.ISearchFilter)
     form_fields['connector'].custom_widget = ConnectorWidget
 
     template = ViewPageTemplateFile('filter.pt')
     criteriumRows = None
 
-    # Must be implemented by sub-class or instance
-    criteriaClass = None
+    # Can be overriden by sub-class or instance
+    filterClass = criterium.SearchFilter
 
     # The filter name is used in the session to identify the type of filter
-    filterName = 'criteria'
+    filterName = 'searchFilter'
 
     # The context name is used in addition to the filter name to identify one
     # filter for one specific context.
@@ -86,7 +86,7 @@
         return api.getName(self.context)
 
     @property
-    def criteria(self):
+    def searchFilter(self):
         session = ISession(self.request)
         filters = session[FILTER_KEY]
 
@@ -98,36 +98,36 @@
 
         # Note, the context reference has to be deleted if we delete the
         # context
-        criteria = filter.get(self.contextName)
-        if criteria is None:
-            criteria = filter[self.contextName] = self.criteriaClass()
-            # Locate the search criteria on the context, so that security does
+        searchFilter = filter.get(self.contextName)
+        if searchFilter is None:
+            searchFilter = filter[self.contextName] = self.filterClass()
+            # Locate the search filter on the context, so that security does
             # not get lost
-            location.locate(criteria, self.context, self.contextName)
-        return criteria
+            location.locate(searchFilter, self.context, self.contextName)
+        return searchFilter
 
     def values(self):
         queries = []
         # Generate the query
-        queries.append(self.criteria.generateQuery())
+        queries.append(self.searchFilter.generateQuery())
         # Return the results
         try:
             return query.query.Query().searchResults(query.And(*queries))
         except TypeError:
-            self.status = _('One of the criteria is setup improperly.')
+            self.status = _('One of the search filter is setup improperly.')
         except parsetree.ParseError, error:
             self.status = _('Invalid search text.')
         # Return an empty set, since an error must have occurred
         return []
 
     def available(self):
-        for name, factory in self.criteria.available():
+        for name, factory in self.searchFilter.available():
             yield {'name': name, 'title': factory.title}
 
     def _createCriteriumRows(self):
         self.criteriumRows = []
         index = 0
-        for criterium in self.criteria:
+        for criterium in self.searchFilter:
             row = zope.component.getMultiAdapter(
                 (criterium, self.request), name='row')
             row.setPrefix(str(index))
@@ -136,28 +136,28 @@
             index += 1
 
     def update(self):
-        # Make sure the criteria get updated
+        # Make sure the search filter get updated
         self._createCriteriumRows()
         # Execute actions
-        super(Filter, self).update()
+        super(SearchFilterForm, self).update()
 
     @form.action(_('Filter'))
     def handleFilter(self, action, data):
         if 'connector' in data:
-            self.criteria.connector = data['connector']
+            self.searchFilter.connector = data['connector']
         for row in self.criteriumRows:
             row.save()
 
     @form.action(_('Add'))
     def handleAdd(self, action, data):
         name = self.request.form[self.prefix + 'newCriterium']
-        self.criteria.add(name)
+        self.searchFilter.add(name)
         self._createCriteriumRows()
         self.status = _('New criterium added.')
 
     @form.action(_('Clear'))
     def handleClear(self, action, data):
-        self.criteria.clear()
+        self.searchFilter.clear()
         self._createCriteriumRows()
         self.status = _('Criteria cleared.')
 

Modified: z3c.searchfilter/trunk/src/z3c/searchfilter/criterium.py
===================================================================
--- z3c.searchfilter/trunk/src/z3c/searchfilter/criterium.py	2007-03-09 21:27:51 UTC (rev 73132)
+++ z3c.searchfilter/trunk/src/z3c/searchfilter/criterium.py	2007-03-10 00:23:27 UTC (rev 73133)
@@ -30,45 +30,53 @@
 from z3c.searchfilter import interfaces
 from z3c.searchfilter.interfaces import _
 
-class SearchCriteria(location.Location, persistent.list.PersistentList):
+
+class EmptyTerm(object):
+    def apply(self):
+        return []
+
+
+class SearchFilter(location.Location, persistent.list.PersistentList):
     """Simple search criteria implementation.
 
     This component uses the component architecture to determine its available
     criterium components.
     """
-    zope.interface.implements(interfaces.ISearchCriteria)
+    zope.interface.implements(interfaces.ISearchFilter)
 
-    connector = FieldProperty(interfaces.ISearchCriteria['connector'])
-    # Must be implemented by sub-class or instance
-    allIndex = None
+    connector = FieldProperty(interfaces.ISearchFilter['connector'])
 
     def clear(self):
-        """See interfaces.ISearchCriteria"""
-        super(SearchCriteria, self).__init__()
+        """See interfaces.ISearchFilter"""
+        super(SearchFilter, self).__init__()
         self.connector = query.Or
 
     def add(self, name):
-        """See interfaces.ISearchCriteria"""
+        """See interfaces.ISearchFilter"""
         criterium = zope.component.getAdapter(
             self, interfaces.ISearchCriteriumFactory, name=name)()
         location.locate(criterium, self)
         self.append(criterium)
 
     def available(self):
-        """See interfaces.ISearchCriteria"""
+        """See interfaces.ISearchFilter"""
         adapters = zope.component.getAdapters(
             (self,), interfaces.ISearchCriteriumFactory)
         return sorted(adapters, key=lambda (n, a): a.weight)
 
+    def getDefaultQuery(self):
+        """See interfaces.ISearchFilter"""
+        return EmptyTerm()
+
     def getAllQuery(self):
-        """See interfaces.ISearchCriteria"""
-        return hurry.query.value.ExtentAny(self.allIndex, None)
+        """See interfaces.ISearchFilter"""
+        return None
 
     def generateQuery(self):
-        """See interfaces.ISearchCriteria"""
+        """See interfaces.ISearchFilter"""
         # If no criteria are selected, return all values
         if not len(self):
-            return self.getAllQuery()
+            return self.getDefaultQuery()
         # Set up the queries of the contained criteria; if one setup fails,
         # just ignore the criterium.
         queries = []
@@ -78,8 +86,12 @@
             except AssertionError:
                 # The criterium is probably setup incorrectly
                 pass
-        # Match the specified criteria in comparison to all possible values.
-        return query.And(self.connector(*queries), self.getAllQuery())
+        # Match the specified query in comparison to all possible values.
+        allQuery = self.getAllQuery()
+        if allQuery is not None:
+            return query.And(self.connector(*queries), allQuery)
+        else:
+            return self.connector(*queries)
 
 
 class SimpleSearchCriterium(persistent.Persistent):

Modified: z3c.searchfilter/trunk/src/z3c/searchfilter/interfaces.py
===================================================================
--- z3c.searchfilter/trunk/src/z3c/searchfilter/interfaces.py	2007-03-09 21:27:51 UTC (rev 73132)
+++ z3c.searchfilter/trunk/src/z3c/searchfilter/interfaces.py	2007-03-10 00:23:27 UTC (rev 73133)
@@ -25,7 +25,7 @@
 _ = zope.i18nmessageid.MessageFactory('z3c.searchfilter')
 
 
-class ISearchCriteria(zope.interface.Interface):
+class ISearchFilter(zope.interface.Interface):
     """Search criteria for position search."""
 
     connector = zope.schema.Choice(
@@ -49,8 +49,17 @@
     def available():
         """Return a sequence of names of all available criteria."""
 
+    def getDefaultQuery(self):
+        """Get a query that returns the default values. 
+        
+        Override this method in your custom search filter if needed.
+        """
+
     def getAllQuery(self):
-        """Get a query that returns all possible values."""
+        """Get a query that returns all values used for restrict the search.
+        
+        Override this method in your custom search filter if needed.
+        """
 
     def generateQuery():
         """Generate a query object."""



More information about the Checkins mailing list