[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