[Checkins] SVN: z3c.searcher/trunk/ - Bugfix: Criterium didn't get correct located in SearchFilter. The criterium
Roger Ineichen
roger at projekt01.ch
Sat Sep 19 18:20:58 EDT 2009
Log message for revision 104369:
- Bugfix: Criterium didn't get correct located in SearchFilter. The criterium
__name__ was allways an empty unicode value.
- Bugfix: The criterim filter didn't work with more then one criterium used.
The search form now locates the filter form and will set a individual prefix
for the criterium form.
- adjust tests, reflect latest changes and fix element attribute order which
get changed in z3c.form
- prepare for release
Changed:
U z3c.searcher/trunk/CHANGES.txt
U z3c.searcher/trunk/setup.py
U z3c.searcher/trunk/src/z3c/searcher/README.txt
U z3c.searcher/trunk/src/z3c/searcher/criterium.pt
U z3c.searcher/trunk/src/z3c/searcher/filter.py
U z3c.searcher/trunk/src/z3c/searcher/form.py
U z3c.searcher/trunk/src/z3c/searcher/interfaces.py
-=-
Modified: z3c.searcher/trunk/CHANGES.txt
===================================================================
--- z3c.searcher/trunk/CHANGES.txt 2009-09-19 21:10:16 UTC (rev 104368)
+++ z3c.searcher/trunk/CHANGES.txt 2009-09-19 22:20:58 UTC (rev 104369)
@@ -2,12 +2,22 @@
CHANGES
=======
-0.5.3 (unreleased)
+0.6.0 (2009-09-20)
------------------
-- ...
+- Bugfix: Criterium didn't get correct located in SearchFilter. The criterium
+ __name__ was allways an empty unicode value.
+- Bugfix: The criterim filter didn't work with more then one criterium used.
+ The search form now locates the filter form and will set a individual prefix
+ for the criterium form. If you use a custom criterium form, you probably
+ have to review your custom implementation. Especialy review the prefix setup
+ in the setupCriteriumRows method.
+- adjust tests, reflect latest changes and fix element attribute order which
+ get changed in z3c.form
+
+
0.5.2 (2009-03-10)
------------------
Modified: z3c.searcher/trunk/setup.py
===================================================================
--- z3c.searcher/trunk/setup.py 2009-09-19 21:10:16 UTC (rev 104368)
+++ z3c.searcher/trunk/setup.py 2009-09-19 22:20:58 UTC (rev 104369)
@@ -23,7 +23,7 @@
setup (
name='z3c.searcher',
- version='0.5.3dev',
+ version='0.6.0',
author = "Roger Ineichen and the Zope Community",
author_email = "zope-dev at zope.org",
description = "Persistent and session based search form for Zope3",
Modified: z3c.searcher/trunk/src/z3c/searcher/README.txt
===================================================================
--- z3c.searcher/trunk/src/z3c/searcher/README.txt 2009-09-19 21:10:16 UTC (rev 104368)
+++ z3c.searcher/trunk/src/z3c/searcher/README.txt 2009-09-19 22:20:58 UTC (rev 104369)
@@ -450,6 +450,7 @@
Criterium Form
--------------
+
Now we will show you how the form part is working. Each criterium can render
itself within a form. We offer a CriteriumForm class for doing this. Let's
create and render such a criterium form:
@@ -460,6 +461,15 @@
>>> criteriumRow
<z3c.searcher.form.CriteriumForm object at ...>
+We also need to set a prefix, this is normaly done by the search form by
+calling setupCriteriumRows. And normaly the criterium is located in the search
+filter. We just need a criterium __name__ for now:
+
+ >>> textCriterium.__name__ = u'1'
+ >>> criteriumRow.prefix = 'form.criterium.%s' % str(textCriterium.__name__)
+ >>> criteriumRow.prefix
+ 'form.criterium.1'
+
Before we can render the form, we need to register the templates:
>>> from zope.configuration import xmlconfig
@@ -521,41 +531,45 @@
<b>matches</b>
</td>
<td style="padding-right:5px;">
- <input type="text" id="form-widgets-value"
- name="form.widgets.value"
- class="text-widget required textline-field" value="" />
- <span class="option">
- <label for="form-widgets-connectorName-0">
- <input type="radio" id="form-widgets-connectorName-0"
- name="form.widgets.connectorName:list"
+ <input id="form-criterium-1-widgets-value"
+ name="form.criterium.1.widgets.value"
+ class="text-widget required textline-field"
+ value="" type="text" />
+ <span class="option">
+ <label for="form-criterium-1-widgets-connectorName-0">
+ <input id="form-criterium-1-widgets-connectorName-0"
+ name="form.criterium.1.widgets.connectorName:list"
class="radio-widget required choice-field"
- value="OR" checked="checked" />
+ value="OR" checked="checked" type="radio" />
<span class="label">or</span>
</label>
- </span><span class="option">
- <label for="form-widgets-connectorName-1">
- <input type="radio" id="form-widgets-connectorName-1"
- name="form.widgets.connectorName:list"
+ </span>
+ <span class="option">
+ <label for="form-criterium-1-widgets-connectorName-1">
+ <input id="form-criterium-1-widgets-connectorName-1"
+ name="form.criterium.1.widgets.connectorName:list"
class="radio-widget required choice-field"
- value="AND" />
+ value="AND" type="radio" />
<span class="label">and</span>
</label>
- </span><span class="option">
- <label for="form-widgets-connectorName-2">
- <input type="radio" id="form-widgets-connectorName-2"
- name="form.widgets.connectorName:list"
+ </span>
+ <span class="option">
+ <label for="form-criterium-1-widgets-connectorName-2">
+ <input id="form-criterium-1-widgets-connectorName-2"
+ name="form.criterium.1.widgets.connectorName:list"
class="radio-widget required choice-field"
- value="NOT" />
+ value="NOT" type="radio" />
<span class="label">not</span>
</label>
</span>
- <input name="form.widgets.connectorName-empty-marker"
+ <input name="form.criterium.1.widgets.connectorName-empty-marker"
type="hidden" value="1" />
</td>
<td style="padding-right:5px;">
- <input type="submit" id="form-buttons-remove"
- name="form.buttons.remove"
- class="submit-widget button-field" value="Remove" />
+ <input id="form-criterium-1-buttons-remove"
+ name="form.criterium.1.buttons.remove"
+ class="submit-widget button-field" value="Remove"
+ type="submit" />
</td>
</tr>
@@ -590,17 +604,20 @@
<select name="filterformnewCriterium" size="1">
<option value="fullText">fullText</option>
</select>
- <input type="submit" id="filterform-buttons-add"
- name="filterform.buttons.add"
- class="submit-widget button-field" value="Add" />
+ <input id="filterform-buttons-add"
+ name="filterform.buttons.add"
+ class="submit-widget button-field" value="Add"
+ type="submit" />
</div>
<div>
- <input type="submit" id="filterform-buttons-search"
- name="filterform.buttons.search"
- class="submit-widget button-field" value="Search" />
- <input type="submit" id="filterform-buttons-clear"
- name="filterform.buttons.clear"
- class="submit-widget button-field" value="Clear" />
+ <input id="filterform-buttons-search"
+ name="filterform.buttons.search"
+ class="submit-widget button-field" value="Search"
+ type="submit" />
+ <input id="filterform-buttons-clear"
+ name="filterform.buttons.clear"
+ class="submit-widget button-field" value="Clear"
+ type="submit" />
</div>
</fieldset>
@@ -632,10 +649,6 @@
enctype="multipart/form-data" class="edit-form"
name="form" id="form">
<div class="viewspace">
- <div class="required-info">
- <span class="required">*</span>
- – required
- </div>
<div>
<fieldset>
<legend>Filter</legend>
@@ -646,17 +659,20 @@
<select name="filterformnewCriterium" size="1">
<option value="fullText">fullText</option>
</select>
- <input type="submit" id="filterform-buttons-add"
- name="filterform.buttons.add"
- class="submit-widget button-field" value="Add" />
+ <input id="filterform-buttons-add"
+ name="filterform.buttons.add"
+ class="submit-widget button-field" value="Add"
+ type="submit" />
</div>
<div>
- <input type="submit" id="filterform-buttons-search"
- name="filterform.buttons.search"
- class="submit-widget button-field" value="Search" />
- <input type="submit" id="filterform-buttons-clear"
- name="filterform.buttons.clear"
- class="submit-widget button-field" value="Clear" />
+ <input id="filterform-buttons-search"
+ name="filterform.buttons.search"
+ class="submit-widget button-field" value="Search"
+ type="submit" />
+ <input id="filterform-buttons-clear"
+ name="filterform.buttons.clear"
+ class="submit-widget button-field" value="Clear"
+ type="submit" />
</div>
</fieldset>
</div>
@@ -698,10 +714,6 @@
enctype="multipart/form-data" class="edit-form"
name="formTable" id="formTable">
<div class="viewspace">
- <div class="required-info">
- <span class="required">*</span>
- – required
- </div>
<div>
<div class="filterForm">
<fieldset>
@@ -713,17 +725,20 @@
<select name="filterformnewCriterium" size="1">
<option value="fullText">fullText</option>
</select>
- <input type="submit" id="filterform-buttons-add"
+ <input id="filterform-buttons-add"
name="filterform.buttons.add"
- class="submit-widget button-field" value="Add" />
+ class="submit-widget button-field" value="Add"
+ type="submit" />
</div>
<div>
- <input type="submit" id="filterform-buttons-search"
+ <input id="filterform-buttons-search"
name="filterform.buttons.search"
- class="submit-widget button-field" value="Search" />
- <input type="submit" id="filterform-buttons-clear"
+ class="submit-widget button-field" value="Search"
+ type="submit" />
+ <input id="filterform-buttons-clear"
name="filterform.buttons.clear"
- class="submit-widget button-field" value="Clear" />
+ class="submit-widget button-field" value="Clear"
+ type="submit" />
</div>
</fieldset>
</div>
Modified: z3c.searcher/trunk/src/z3c/searcher/criterium.pt
===================================================================
--- z3c.searcher/trunk/src/z3c/searcher/criterium.pt 2009-09-19 21:10:16 UTC (rev 104368)
+++ z3c.searcher/trunk/src/z3c/searcher/criterium.pt 2009-09-19 22:20:58 UTC (rev 104369)
@@ -11,6 +11,6 @@
<tal:block replace="structure view/widgets/connectorName/render" />
</td>
<td style="padding-right:5px;">
- <input tal:replace="structure view/actions/remove/render" />
+ <input tal:replace="structure view/actions/remove/render" />
</td>
</tr>
Modified: z3c.searcher/trunk/src/z3c/searcher/filter.py
===================================================================
--- z3c.searcher/trunk/src/z3c/searcher/filter.py 2009-09-19 21:10:16 UTC (rev 104368)
+++ z3c.searcher/trunk/src/z3c/searcher/filter.py 2009-09-19 22:20:58 UTC (rev 104369)
@@ -45,9 +45,12 @@
"""
zope.interface.implements(interfaces.ISearchFilter)
+ counter = 0
+
def __init__(self):
super(SearchFilter, self).__init__()
self.criteria = persistent.list.PersistentList()
+ self.counter = 0
def clear(self):
"""See interfaces.ISearchFilter"""
@@ -66,13 +69,13 @@
self, interfaces.ISearchCriteriumFactory, name=name)()
if value is not interfaces.NOVALUE:
criterium.value = value
- criterium.__name__ = name
criterium.__parent__ = self
return criterium
def addCriterium(self, criterium):
"""See interfaces.ISearchFilter"""
- location.locate(criterium, self)
+ self.counter += 1
+ location.locate(criterium, self, unicode(self.counter))
self.criteria.append(criterium)
def createAndAddCriterium(self, name, value=interfaces.NOVALUE):
Modified: z3c.searcher/trunk/src/z3c/searcher/form.py
===================================================================
--- z3c.searcher/trunk/src/z3c/searcher/form.py 2009-09-19 21:10:16 UTC (rev 104368)
+++ z3c.searcher/trunk/src/z3c/searcher/form.py 2009-09-19 22:20:58 UTC (rev 104369)
@@ -95,7 +95,7 @@
prefix = 'filterform'
ignoreContext = True
criteriumRows = []
- searchFilter = None
+ rowName = 'row'
# The filterName is used in the ISearchSession to identify filter
filterName = 'searchFilter'
@@ -113,6 +113,11 @@
"""
return interfaces.SEARCH_SESSION_FILTER_KEY
+ @property
+ def addCriteriumName(self):
+ return self.prefix + '-add'
+
+ @property
def criteriumFactories(self):
for name, factory in self.searchFilter.criteriumFactories:
yield {'name': name, 'title': factory.title}
@@ -147,34 +152,34 @@
def setupCriteriumRows(self):
self.criteriumRows = []
append = self.criteriumRows.append
- index = 0
for criterium in self.searchFilter.criteria:
row = zope.component.getMultiAdapter(
- (criterium, self.request), name='row')
- row.prefix = str(index)
+ (criterium, self.request), name=self.rowName)
+ row.__name__ = row.criteriumName
+ row.prefix = '%s.criterium.%s' % (self.prefix,
+ str(row.criteriumName))
row.update()
append(row)
- index += 1
def update(self):
self.setupCriteriumRows()
super(FilterForm, self).update()
- @button.buttonAndHandler(u'Add')
+ @button.buttonAndHandler(_(u'Add'), name='add')
def handleAdd(self, action):
- name = self.request.get(self.prefix + 'newCriterium', None)
+ name = self.request.get(self.addCriteriumName, None)
if name is not None:
self.searchFilter.createAndAddCriterium(name)
self.setupCriteriumRows()
self.status = _('New criterium added.')
- @button.buttonAndHandler(u'Clear', name='clear')
+ @button.buttonAndHandler(_(u'Clear'), name='clear')
def handleClear(self, action):
self.searchFilter.clear()
self.setupCriteriumRows()
self.status = _('Criteria cleared.')
- @button.buttonAndHandler(u'Search', name='search')
+ @button.buttonAndHandler(_(u'Search'), name='search')
def handleSearch(self, action):
data, errors = self.widgets.extract()
for row in self.criteriumRows:
Modified: z3c.searcher/trunk/src/z3c/searcher/interfaces.py
===================================================================
--- z3c.searcher/trunk/src/z3c/searcher/interfaces.py 2009-09-19 21:10:16 UTC (rev 104368)
+++ z3c.searcher/trunk/src/z3c/searcher/interfaces.py 2009-09-19 22:20:58 UTC (rev 104369)
@@ -189,13 +189,65 @@
"""Generate a query object."""
+class ICriteriumForm(IForm):
+ """Criterium form."""
+
+ criteriumName = zope.schema.Field(
+ title=_('Criterium name'),
+ description=_('The criterium name'),
+ required=True)
+
+ def save():
+ """Save criterium changes."""
+
+
class IFilterForm(IForm):
"""Filter form."""
+ criteriumRows = zope.schema.List(
+ title=_('List of criterium forms'),
+ description=_('A list of criterium forms'),
+ value_type=zope.schema.Field(
+ title=_('Criterium form'),
+ description=_('Criterium form'),
+ required=True
+ ),
+ default=[],
+ required=False)
+ rowName = zope.schema.Field(
+ title=_('Row name'),
+ description=_('The row name used for lookup row forms.'),
+ required=True)
+
+ filterKey = zope.schema.Field(
+ title=_('Seach filter key'),
+ description=_('The search filter annotation key.'),
+ required=True,
+ default=SEARCH_SESSION_FILTER_KEY)
+
+ addCriteriumName = zope.schema.Field(
+ title=_('Add criterium name'),
+ description=_('The name used for identify add criterium action.'),
+ required=True)
+
+ criteriumFactories = zope.schema.Dict(
+ title=_('Name criterium factory dictionary'),
+ description=_('The name criterium factory dictionary'),
+ required=True,
+ default={})
+
+ searchFilter = zope.schema.Field(
+ title=_('Search filter class'),
+ description=_('The search filter class'),
+ required=False)
+
+ def setupCriteriumRows():
+ """Setup criterium row forms."""
+
+
class ISearchForm(IForm):
"""Search form."""
-
class ISearchTable(ITable):
"""Search table."""
More information about the checkins
mailing list