[Checkins] SVN: z3c.form/branches/adamg-missing-terms/src/z3c/form/ adding tests and fixing on the way
Adam Groszer
cvs-admin at zope.org
Fri Sep 7 09:39:26 UTC 2012
Log message for revision 127763:
adding tests and fixing on the way
Changed:
U z3c.form/branches/adamg-missing-terms/src/z3c/form/term.py
U z3c.form/branches/adamg-missing-terms/src/z3c/form/term.txt
U z3c.form/branches/adamg-missing-terms/src/z3c/form/validator.py
U z3c.form/branches/adamg-missing-terms/src/z3c/form/validator.txt
-=-
Modified: z3c.form/branches/adamg-missing-terms/src/z3c/form/term.py
===================================================================
--- z3c.form/branches/adamg-missing-terms/src/z3c/form/term.py 2012-09-07 09:39:01 UTC (rev 127762)
+++ z3c.form/branches/adamg-missing-terms/src/z3c/form/term.py 2012-09-07 09:39:22 UTC (rev 127763)
@@ -133,16 +133,23 @@
try:
return self.terms.getTerm(value)
except LookupError:
- return self.makeMissingTerm(value)
+ if (interfaces.IContextAware.providedBy(self.widget) and
+ not self.widget.ignoreContext):
+ curValue = zope.component.getMultiAdapter(
+ (self.widget.context, self.field),
+ interfaces.IDataManager).query()
+ if curValue == value:
+ return self._makeMissingTerm(value)
- def makeToken(self, value):
- # create a unique valid ASCII token
+ raise
+
+ def _makeToken(self, value):
+ """create a unique valid ASCII token"""
return util.createCSSId(unicode(value))
- def makeMissingTerm(self, value):
- """Return a term that should be displayed for the missing token or
- raise LookupError if it's really invalid"""
- return vocabulary.SimpleTerm(value, self.makeToken(value),
+ def _makeMissingTerm(self, value):
+ """Return a term that should be displayed for the missing token"""
+ return vocabulary.SimpleTerm(value, self._makeToken(value),
title=_(u'Missing: ${value}', mapping=dict(value=unicode(value))))
def getTermByToken(self, token):
@@ -152,9 +159,9 @@
if (interfaces.IContextAware.providedBy(self.widget) and
not self.widget.ignoreContext):
value = zope.component.getMultiAdapter(
- (self.widget.context, self.widget.field),
+ (self.widget.context, self.field),
interfaces.IDataManager).query()
- term = self.makeMissingTerm(value)
+ term = self._makeMissingTerm(value)
if term.token == token:
# check if the given token matches the value, if not
# fall back on LookupError, otherwise we might accept
Modified: z3c.form/branches/adamg-missing-terms/src/z3c/form/term.txt
===================================================================
--- z3c.form/branches/adamg-missing-terms/src/z3c/form/term.txt 2012-09-07 09:39:01 UTC (rev 127762)
+++ z3c.form/branches/adamg-missing-terms/src/z3c/form/term.txt 2012-09-07 09:39:22 UTC (rev 127763)
@@ -144,13 +144,85 @@
>>> terms = term.ChoiceTerms(
... None, request, None, ratingField, widget)
>>> term = terms.getTermByToken('42')
- >>> term.token
+ Traceback (most recent call last):
+ ...
+ LookupError: 42
+
+The same goes with looking up a term by value:
+
+ >>> term = terms.getTerm('42')
+ Traceback (most recent call last):
+ ...
+ LookupError: 42
+
+Ooops, well this works only if the context has the right value for us.
+This is because we don't want to accept any crap that's coming from HTML.
+
+ >>> class IPerson(zope.interface.Interface):
+ ... gender = zope.schema.Choice(title=u'Gender', vocabulary='Genders')
+ >>> class Person(object):
+ ... zope.interface.implements(IPerson)
+ ... gender = None
+ >>> gendersVocabulary = vocabulary.SimpleVocabulary([
+ ... vocabulary.SimpleVocabulary.createTerm(1, 'male', u'Male'),
+ ... vocabulary.SimpleVocabulary.createTerm(2, 'female', u'Female'),
+ ... ])
+ >>> def GendersVocabulary(obj):
+ ... return ratings
+ >>> vr.register('Genders', GendersVocabulary)
+
+ >>> ctx = Person()
+ >>> ctx.gender = 42
+
+ >>> genderWidget = z3c.form.widget.Widget(request)
+ >>> genderWidget.context = ctx
+ >>> from z3c.form import interfaces
+ >>> zope.interface.alsoProvides(genderWidget, interfaces.IContextAware)
+ >>> from z3c.form.datamanager import AttributeField
+ >>> zope.component.provideAdapter(AttributeField)
+
+ >>> terms = term.ChoiceTerms(
+ ... ctx, request, None, IPerson['gender'], genderWidget)
+
+Here we go:
+
+ >>> missingTerm = terms.getTermByToken('42')
+
+We get the term, we passed the token, the value is coming from the context.
+
+ >>> missingTerm.token
'42'
- >>> term.value
+ >>> missingTerm.value
+ 42
+
+We cannot figure the title, so we construct one.
+Override ``makeMissingTerm`` if you want your own.
+
+ >>> missingTerm.title
+ u'Missing: ${value}'
+
+Still we raise LookupError if the token does not fit the context's value:
+
+ >>> missingTerm = terms.getTermByToken('99')
+ Traceback (most recent call last):
+ ...
+ LookupError: 99
+
+The same goes with looking up a term by value.
+We get the term if the context's value fits:
+
+ >>> missingTerm = terms.getTerm(42)
+ >>> missingTerm.token
'42'
- >>> term.title
- u'Missing: ${token}'
+And an exception if it does not:
+
+ >>> missingTerm = terms.getTerm(99)
+ Traceback (most recent call last):
+ ...
+ LookupError: 99
+
+
Bool fields
+++++++++++
Modified: z3c.form/branches/adamg-missing-terms/src/z3c/form/validator.py
===================================================================
--- z3c.form/branches/adamg-missing-terms/src/z3c/form/validator.py 2012-09-07 09:39:01 UTC (rev 127762)
+++ z3c.form/branches/adamg-missing-terms/src/z3c/form/validator.py 2012-09-07 09:39:22 UTC (rev 127763)
@@ -47,7 +47,7 @@
"""See interfaces.IValidator"""
if value is interfaces.NOT_CHANGED:
# no need to validate unchanged values
- return True
+ return
context = self.context
field = self.field
@@ -61,7 +61,7 @@
if widget and not util.changedWidget(widget, value, field=field):
# if new value == old value, no need to validate
- return True
+ return
return field.validate(value)
def __repr__(self):
Modified: z3c.form/branches/adamg-missing-terms/src/z3c/form/validator.txt
===================================================================
--- z3c.form/branches/adamg-missing-terms/src/z3c/form/validator.txt 2012-09-07 09:39:01 UTC (rev 127762)
+++ z3c.form/branches/adamg-missing-terms/src/z3c/form/validator.txt 2012-09-07 09:39:22 UTC (rev 127763)
@@ -194,7 +194,8 @@
>>> class IPhoto(zope.interface.Interface):
... data = zope.schema.Bytes(
- ... title=u'Photo')
+ ... title=u'Photo',
+ ... required=True)
...
... thumb = zope.schema.Bytes(
... title=u'Thumbnail',
More information about the checkins
mailing list