[Zope3-checkins] SVN: Zope3/trunk/src/zope/app/ Correct hasInput
semantics for source widgets.
Gary Poster
gary at zope.com
Wed Aug 3 14:47:41 EDT 2005
Log message for revision 37684:
Correct hasInput semantics for source widgets.
Correct granting code that was relying on incorrect semantics of said widget.
Make some of the tests more readable by breaking lines.
Changed:
U Zope3/trunk/src/zope/app/authentication/browser/group_searching_with_empty_string.txt
U Zope3/trunk/src/zope/app/authentication/browser/pau_prefix_and_searching.txt
U Zope3/trunk/src/zope/app/form/browser/source.py
U Zope3/trunk/src/zope/app/form/browser/source.txt
U Zope3/trunk/src/zope/app/securitypolicy/browser/granting.py
U Zope3/trunk/src/zope/app/securitypolicy/browser/granting_ftest.txt
-=-
Modified: Zope3/trunk/src/zope/app/authentication/browser/group_searching_with_empty_string.txt
===================================================================
--- Zope3/trunk/src/zope/app/authentication/browser/group_searching_with_empty_string.txt 2005-08-03 16:08:46 UTC (rev 37683)
+++ Zope3/trunk/src/zope/app/authentication/browser/group_searching_with_empty_string.txt 2005-08-03 18:47:41 UTC (rev 37684)
@@ -231,7 +231,10 @@
... Content-Type: application/x-www-form-urlencoded
... Referer: http://localhost:8081/@@grant.html
...
- ... field.principal.displayed=y&field.principal.MC5ncm91cHM_.field.search=&field.principal.MC5ncm91cHM_.search=Search&field.principal.MQ__.searchstring=""")
+ ... field.principal.displayed=y&"""
+ ... "field.principal.MC5ncm91cHM_.field.search=&"
+ ... "field.principal.MC5ncm91cHM_.search=Search&"
+ ... "field.principal.MQ__.searchstring=")
HTTP/1.1 200 Ok
...Test1...Test2...
Modified: Zope3/trunk/src/zope/app/authentication/browser/pau_prefix_and_searching.txt
===================================================================
--- Zope3/trunk/src/zope/app/authentication/browser/pau_prefix_and_searching.txt 2005-08-03 16:08:46 UTC (rev 37683)
+++ Zope3/trunk/src/zope/app/authentication/browser/pau_prefix_and_searching.txt 2005-08-03 18:47:41 UTC (rev 37684)
@@ -301,7 +301,11 @@
... Content-Length: 191
... Content-Type: application/x-www-form-urlencoded
...
- ... field.principal.displayed=y&field.principal.MC5Hcm91cHM_.field.search=&field.principal.MC5Hcm91cHM_.search=Search&field.principal.MC5Vc2Vycw__.field.search=&field.principal.MQ__.searchstring=""")
+ ... field.principal.displayed=y&"""
+ ... "field.principal.MC5Hcm91cHM_.field.search=&"
+ ... "field.principal.MC5Hcm91cHM_.search=Search&"
+ ... "field.principal.MC5Vc2Vycw__.field.search=&"
+ ... "field.principal.MQ__.searchstring=")
HTTP/1.1 200 Ok
...
<select name="field.principal.MC5Hcm91cHM_.selection">
@@ -321,7 +325,12 @@
... Content-Length: 255
... Content-Type: application/x-www-form-urlencoded
...
- ... field.principal.displayed=y&field.principal.MC5Hcm91cHM_.field.search=&field.principal.MC5Hcm91cHM_.selection=cGF1MV9ncm91cHNfbmljZQ__&field.principal.MC5Vc2Vycw__.field.search=&field.principal.MC5Vc2Vycw__.search=Search&field.principal.MQ__.searchstring=""")
+ ... field.principal.displayed=y&"""
+ ... "field.principal.MC5Hcm91cHM_.field.search=&"
+ ... "field.principal.MC5Hcm91cHM_.selection=cGF1MV9ncm91cHNfbmljZQ__&"
+ ... "field.principal.MC5Vc2Vycw__.field.search=&"
+ ... "field.principal.MC5Vc2Vycw__.search=Search&"
+ ... "field.principal.MQ__.searchstring=")
HTTP/1.1 200 Ok
...
<select name="field.principal.MC5Vc2Vycw__.selection">
Modified: Zope3/trunk/src/zope/app/form/browser/source.py
===================================================================
--- Zope3/trunk/src/zope/app/form/browser/source.py 2005-08-03 16:08:46 UTC (rev 37683)
+++ Zope3/trunk/src/zope/app/form/browser/source.py 2005-08-03 18:47:41 UTC (rev 37684)
@@ -318,11 +318,8 @@
return value
def hasInput(self):
- if self.name in self.request:
+ if self.name in self.request or self.name+'.displayed' in self.request:
return True
- if (not self.context.required and
- self.name+'.displayed' in self.request):
- return True
for name, queryview in self.queryviews:
if name+'.apply' in self.request:
Modified: Zope3/trunk/src/zope/app/form/browser/source.txt
===================================================================
--- Zope3/trunk/src/zope/app/form/browser/source.txt 2005-08-03 16:08:46 UTC (rev 37683)
+++ Zope3/trunk/src/zope/app/form/browser/source.txt 2005-08-03 18:47:41 UTC (rev 37684)
@@ -155,36 +155,30 @@
>>> request.form['field.dog.query.string'] = u'o'
>>> request.form['field.dog.query'] = u'Search'
-Because the field is required, a non-selection is not valid. Thus, the widget
-does not have an input value.
+Because the field is required, a non-selection is not valid. Thus, while the
+widget still hasInput, it will raise an error when you getInputValue.
>>> widget.hasInput()
- False
+ True
+ >>> widget.getInputValue()
+ Traceback (most recent call last):
+ ...
+ MissingInputError: ('dog', u'Dogs', None)
If the field is not required:
>>> dog.required = False
-then as long as the field is displayed, the widget says it has input.
+then as long as the field is displayed, the widget still has input but returns
+the field's missing value.
>>> widget.hasInput()
True
+ >>> widget.getInputValue() # None
- >>> dog.required = True
-
-If we actually provide some input:
-
- >>> request.form['field.dog'] = 'foo'
-
-then we have input:
-
- >>> widget.hasInput()
- True
-
- >>> del request.form['field.dog']
-
Now if we render the widget, we'll see the search results:
+ >>> dog.required = True
>>> print widget()
<div class="value">
<div class="row">
Modified: Zope3/trunk/src/zope/app/securitypolicy/browser/granting.py
===================================================================
--- Zope3/trunk/src/zope/app/securitypolicy/browser/granting.py 2005-08-03 16:08:46 UTC (rev 37683)
+++ Zope3/trunk/src/zope/app/securitypolicy/browser/granting.py 2005-08-03 18:47:41 UTC (rev 37684)
@@ -24,6 +24,7 @@
from zope.app.form.utility import setUpWidget
from zope.app.form.browser import RadioWidget
from zope.app.form.browser.widget import renderElement
+from zope.app.form.interfaces import MissingInputError
from zope.app.i18n import ZopeMessageIDFactory as _
from zope.app.form.interfaces import IInputWidget
@@ -147,8 +148,11 @@
setUpWidget(self, 'principal', self.principal_field, IInputWidget)
if not self.principal_widget.hasInput():
return u''
-
- principal = self.principal_widget.getInputValue()
+ try:
+ principal = self.principal_widget.getInputValue()
+ except MissingInputError:
+ return u''
+
self.principal = principal
# Make sure we can use the principal id in a form by base64ing it
@@ -193,17 +197,21 @@
name = principal_token + '.role.'+role.id
role_widget = getattr(self, name+'_widget')
if role_widget.hasInput():
- setting = role_widget.getInputValue()
- # Arrgh!
- if setting is settings.Allow:
- principal_roles.assignRoleToPrincipal(
- role.id, principal)
- elif setting is settings.Deny:
- principal_roles.removeRoleFromPrincipal(
- role.id, principal)
+ try:
+ setting = role_widget.getInputValue()
+ except MissingInputError:
+ pass
else:
- principal_roles.unsetRoleForPrincipal(
- role.id, principal)
+ # Arrgh!
+ if setting is settings.Allow:
+ principal_roles.assignRoleToPrincipal(
+ role.id, principal)
+ elif setting is settings.Deny:
+ principal_roles.removeRoleFromPrincipal(
+ role.id, principal)
+ else:
+ principal_roles.unsetRoleForPrincipal(
+ role.id, principal)
for perm in perms:
if perm.id == 'zope.Public':
@@ -211,16 +219,20 @@
name = principal_token + '.permission.'+perm.id
perm_widget = getattr(self, name+'_widget')
if perm_widget.hasInput():
- setting = perm_widget.getInputValue()
- # Arrgh!
- if setting is settings.Allow:
- principal_perms.grantPermissionToPrincipal(
- perm.id, principal)
- elif setting is settings.Deny:
- principal_perms.denyPermissionToPrincipal(
- perm.id, principal)
+ try:
+ setting = perm_widget.getInputValue()
+ except MissingInputError:
+ pass
else:
- principal_perms.unsetPermissionForPrincipal(
- perm.id, principal)
+ # Arrgh!
+ if setting is settings.Allow:
+ principal_perms.grantPermissionToPrincipal(
+ perm.id, principal)
+ elif setting is settings.Deny:
+ principal_perms.denyPermissionToPrincipal(
+ perm.id, principal)
+ else:
+ principal_perms.unsetPermissionForPrincipal(
+ perm.id, principal)
return _('Grants updated.')
Modified: Zope3/trunk/src/zope/app/securitypolicy/browser/granting_ftest.txt
===================================================================
--- Zope3/trunk/src/zope/app/securitypolicy/browser/granting_ftest.txt 2005-08-03 16:08:46 UTC (rev 37683)
+++ Zope3/trunk/src/zope/app/securitypolicy/browser/granting_ftest.txt 2005-08-03 18:47:41 UTC (rev 37684)
@@ -26,8 +26,8 @@
... Referer: http://localhost:8081/@@grant.html
...
... field.principal.displayed=y"""
- ... """&field.principal.MA__.searchstring="""
- ... """&field.principal.MA__.search=Search""")
+ ... "&field.principal.MA__.searchstring="
+ ... "&field.principal.MA__.search=Search")
HTTP/1.1 200 Ok
...
<option value="em9wZS5tZ3I_">Manager</option>
More information about the Zope3-Checkins
mailing list