[Checkins]
SVN: grokapps/LoginDemo/branches/PlainLoginDemo/src/logindemo/
fixed app.py and removed tests for user annotations; all tests pass
Luciano Ramalho
luciano at ramalho.org
Sun Jan 13 09:11:28 EST 2008
Log message for revision 82839:
fixed app.py and removed tests for user annotations; all tests pass
Changed:
U grokapps/LoginDemo/branches/PlainLoginDemo/src/logindemo/app.py
U grokapps/LoginDemo/branches/PlainLoginDemo/src/logindemo/ftests/join.txt
U grokapps/LoginDemo/branches/PlainLoginDemo/src/logindemo/ftests/member.txt
-=-
Modified: grokapps/LoginDemo/branches/PlainLoginDemo/src/logindemo/app.py
===================================================================
--- grokapps/LoginDemo/branches/PlainLoginDemo/src/logindemo/app.py 2008-01-13 13:59:50 UTC (rev 82838)
+++ grokapps/LoginDemo/branches/PlainLoginDemo/src/logindemo/app.py 2008-01-13 14:11:28 UTC (rev 82839)
@@ -2,9 +2,10 @@
from urllib import urlencode
-from zope.interface import Interface
-from zope.component import getUtility
+from zope.interface import Interface, implements
+from zope.component import getUtility, getUtilitiesFor
from zope.app.authentication import PluggableAuthentication
+from zope.app.authentication.interfaces import IPasswordManager
from zope.app.authentication.principalfolder import PrincipalFolder
from zope.app.authentication.principalfolder import InternalPrincipal
from zope.app.authentication.principalfolder import IInternalPrincipal
@@ -12,7 +13,7 @@
from zope.app.security.interfaces import IAuthentication
from zope.app.security.interfaces import IUnauthenticatedPrincipal
from zope.app.securitypolicy.interfaces import IPrincipalPermissionManager
-from zope.schema.interfaces import IField
+from zope.schema.interfaces import IField, IIterableSource
from zope.i18n import MessageFactory
_ = MessageFactory('logindemo')
@@ -172,3 +173,20 @@
fields[field] = getattr(user, field)
roster.append(fields)
return roster
+
+class PasswordManagerChoices(object):
+ implements(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
+
\ No newline at end of file
Modified: grokapps/LoginDemo/branches/PlainLoginDemo/src/logindemo/ftests/join.txt
===================================================================
--- grokapps/LoginDemo/branches/PlainLoginDemo/src/logindemo/ftests/join.txt 2008-01-13 13:59:50 UTC (rev 82838)
+++ grokapps/LoginDemo/branches/PlainLoginDemo/src/logindemo/ftests/join.txt 2008-01-13 14:11:28 UTC (rev 82839)
@@ -20,8 +20,8 @@
>>> browser.getLink('join').click()
>>> browser.getControl(name='form.login').value = 'naoh'
>>> browser.getControl(name='form.password').value = 'atra'
- >>> browser.getControl(name='form.name').value = 'Naoh'
- >>> browser.getControl(name='form.email').value = 'naoh at gnufix.de'
+ >>> browser.getControl(name='form.title').value = 'Naoh'
+ >>> browser.getControl(name='form.description').value = 'naoh at gnufix.de'
>>> browser.getControl('Save').click()
This redirects to the login form again. The login name is filled in, so we
Modified: grokapps/LoginDemo/branches/PlainLoginDemo/src/logindemo/ftests/member.txt
===================================================================
--- grokapps/LoginDemo/branches/PlainLoginDemo/src/logindemo/ftests/member.txt 2008-01-13 13:59:50 UTC (rev 82838)
+++ grokapps/LoginDemo/branches/PlainLoginDemo/src/logindemo/ftests/member.txt 2008-01-13 14:11:28 UTC (rev 82839)
@@ -21,26 +21,11 @@
password 5869cb11a7cb62e0e49aa081ea73f2e39e3df168
login ip-login
-Now we turn it into an IUser, to set and get the an e-mail field::
-
- >>> from logindemo.interfaces import UserDataAdapter
- >>> from logindemo.interfaces import IUser
- >>> from zope.component import provideAdapter
- >>> provideAdapter(UserDataAdapter)
- >>> user = IUser(ip)
- >>> user.email = 'user at domain.com'
- >>> for f in IUser:
- ... print f, getattr(user,f)
- login ip-login
- password 5869cb11a7cb62e0e49aa081ea73f2e39e3df168
- name ip-title
- email user at domain.com
-
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::
+as we discover the simplest way 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 logindemo.interfaces import PasswordManagerChoices
+ >>> from logindemo.app import PasswordManagerChoices
>>> choices = PasswordManagerChoices()
>>> len(choices)
3
More information about the Checkins
mailing list