[Checkins] SVN: grokapps/LoginDemo/src/logindemo/ implemented
IIterableSource for password_encoding choice field in IUser
Luciano Ramalho
luciano at ramalho.org
Wed Jan 2 01:37:00 EST 2008
Log message for revision 82637:
implemented IIterableSource for password_encoding choice field in IUser
Changed:
U grokapps/LoginDemo/src/logindemo/app.py
U grokapps/LoginDemo/src/logindemo/ftests/member.txt
U grokapps/LoginDemo/src/logindemo/interfaces.py
-=-
Modified: grokapps/LoginDemo/src/logindemo/app.py
===================================================================
--- grokapps/LoginDemo/src/logindemo/app.py 2008-01-02 05:31:50 UTC (rev 82636)
+++ grokapps/LoginDemo/src/logindemo/app.py 2008-01-02 06:37:00 UTC (rev 82637)
@@ -8,6 +8,8 @@
from zope.app.authentication.principalfolder import PrincipalFolder
from zope.app.authentication.principalfolder import InternalPrincipal
from zope.app.authentication.session import SessionCredentialsPlugin
+# XXX: Failed attempt to display the password_encoding field
+# from zope.app.form.browser.source import SourceDropdownWidget
from zope.app.security.interfaces import IAuthentication
from zope.app.security.interfaces import IUnauthenticatedPrincipal
from zope.app.securitypolicy.interfaces import IPrincipalPermissionManager
@@ -93,6 +95,10 @@
User registration form.
"""
form_fields = grok.AutoFields(IUser)
+
+ # XXX: Failed attempt to display the password_encoding field
+ #form_fields[u'password_encoding'].custom_widget = SourceDropdownWidget
+
form_title = u'User registration'
@grok.action('Save')
Modified: grokapps/LoginDemo/src/logindemo/ftests/member.txt
===================================================================
--- grokapps/LoginDemo/src/logindemo/ftests/member.txt 2008-01-02 05:31:50 UTC (rev 82636)
+++ grokapps/LoginDemo/src/logindemo/ftests/member.txt 2008-01-02 06:37:00 UTC (rev 82637)
@@ -36,15 +36,15 @@
name ip-title
email user at domain.com
-One day we may allow a user to choose his PasswordManager. To allow that,
-we'll need a list of available options::
+One day we may allow a user to choose his PasswordManager. We'll do that as soon
+as we discover how to display a Choices field in a form. Meanwhile, we know
+we'll need a list of available options, so here is how we generate one::
- >>> from zope.component import getUtilitiesFor
- >>> from zope.app.authentication.interfaces import IPasswordManager
- >>> for name, util in sorted(getUtilitiesFor(IPasswordManager)):
- ... print name
+ >>> from logindemo.interfaces import PasswordManagerChoices
+ >>> choices = PasswordManagerChoices()
+ >>> len(choices)
+ 3
+ >>> for choice in choices: print choice
MD5
Plain Text
SHA1
-
-
Modified: grokapps/LoginDemo/src/logindemo/interfaces.py
===================================================================
--- grokapps/LoginDemo/src/logindemo/interfaces.py 2008-01-02 05:31:50 UTC (rev 82636)
+++ grokapps/LoginDemo/src/logindemo/interfaces.py 2008-01-02 06:37:00 UTC (rev 82637)
@@ -2,9 +2,10 @@
from zope.interface import Interface, implements
from zope import schema
-from zope.component import adapts
+from zope.component import adapts, getUtilitiesFor
from zope.annotation.interfaces import IAnnotations
from zope.app.authentication.principalfolder import IInternalPrincipal
+from zope.app.authentication.interfaces import IPasswordManager
from persistent.dict import PersistentDict
from zope.i18n import MessageFactory
@@ -21,12 +22,32 @@
return True
raise NotAnEmailAddress(value)
+class PasswordManagerChoices(object):
+ implements(schema.interfaces.IIterableSource)
+
+ def __init__(self):
+ self.choices = [name for name, util in
+ sorted(getUtilitiesFor(IPasswordManager))]
+
+ def __iter__(self):
+ return iter(self.choices)
+
+ def __len__(self):
+ return len(self.choices)
+
+ def __contains__(self, value):
+ return value in self.choices
+
class IUser(Interface):
"""Basic user data."""
login = schema.TextLine(title=_(u"Login"),
required=True)
password = schema.Password(title=_(u"Password"),
required=True)
+ # XXX: I have not managed yet to display this in the app.py join form
+ #password_encoding = schema.Choice(title=_(u"Password encoding"),
+ # required=True,
+ # source=PasswordManagerChoices())
name = schema.TextLine(title=_(u"Full name"),
required=False)
email = schema.ASCIILine(title=_(u"E-mail"),
@@ -52,7 +73,7 @@
annotations = IAnnotations(context)
self.context = context
self.data = annotations.get(USER_DATA_KEY)
- if self.data is None:
+ if self.data is None:
self.data = PersistentDict()
for field in IUser:
if field not in IInternalPrincipal:
More information about the Checkins
mailing list