[Checkins] SVN: zope.pluggableauth/trunk/ Drop support for Python 2.4 and 2.5.
Tres Seaver
cvs-admin at zope.org
Fri May 18 15:20:42 UTC 2012
Log message for revision 126130:
Drop support for Python 2.4 and 2.5.
Replace deprecated 'zope.component.adapts' usage with equivalent
'zope.component.adapter' decorator.
Replace deprecated 'zope.interface.implements' usage with equivalent
'zope.interface.implementer' decorator.
Changed:
U zope.pluggableauth/trunk/CHANGES.txt
U zope.pluggableauth/trunk/setup.py
U zope.pluggableauth/trunk/src/zope/pluggableauth/README.txt
U zope.pluggableauth/trunk/src/zope/pluggableauth/authentication.py
U zope.pluggableauth/trunk/src/zope/pluggableauth/factories.py
U zope.pluggableauth/trunk/src/zope/pluggableauth/interfaces.py
U zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/ftpplugins.py
U zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/generic.py
U zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/groupfolder.py
U zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/groupfolder.txt
U zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/httpplugins.py
U zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/principalfolder.py
U zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/session.py
U zope.pluggableauth/trunk/src/zope/pluggableauth/tests.py
-=-
Modified: zope.pluggableauth/trunk/CHANGES.txt
===================================================================
--- zope.pluggableauth/trunk/CHANGES.txt 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/CHANGES.txt 2012-05-18 15:20:38 UTC (rev 126130)
@@ -2,12 +2,18 @@
Changes
=======
-1.4 (unreleased)
+2.0 (unreleased)
----------------
-- Nothing changed yet.
+- Replaced deprecated ``zope.component.adapts`` usage with equivalent
+ ``zope.component.adapter`` decorator.
+- Replaced deprecated ``zope.interface.implements`` usage with equivalent
+ ``zope.interface.implementer`` decorator.
+- Dropped support for Python 2.4 and 2.5.
+
+
1.3 (2011-02-08)
----------------
Modified: zope.pluggableauth/trunk/setup.py
===================================================================
--- zope.pluggableauth/trunk/setup.py 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/setup.py 2012-05-18 15:20:38 UTC (rev 126130)
@@ -28,7 +28,7 @@
return open(os.path.join(os.path.dirname(__file__), *rnames)).read()
setup(name='zope.pluggableauth',
- version='1.4dev',
+ version='2.0dev',
author='Zope Foundation and Contributors',
author_email='zope-dev at zope.org',
description='Pluggable Authentication Utility',
@@ -70,6 +70,9 @@
'Intended Audience :: Developers',
'License :: OSI Approved :: Zope Public License',
'Programming Language :: Python',
+ 'Programming Language :: Python :: 2',
+ 'Programming Language :: Python :: 2.6',
+ 'Programming Language :: Python :: 2.7',
'Natural Language :: English',
'Operating System :: OS Independent',
'Topic :: Internet :: WWW/HTTP',
Modified: zope.pluggableauth/trunk/src/zope/pluggableauth/README.txt
===================================================================
--- zope.pluggableauth/trunk/src/zope/pluggableauth/README.txt 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/src/zope/pluggableauth/README.txt 2012-05-18 15:20:38 UTC (rev 126130)
@@ -50,10 +50,9 @@
>>> from zope import interface
>>> from zope.pluggableauth.authentication import interfaces
- >>> class MyCredentialsPlugin(object):
+ >>> @interface.implementer(interfaces.ICredentialsPlugin)
+ ... class MyCredentialsPlugin(object):
...
- ... interface.implements(interfaces.ICredentialsPlugin)
- ...
... def extractCredentials(self, request):
... return request.get('credentials')
...
@@ -74,10 +73,9 @@
Next we'll create a simple authenticator plugin. For our plugin, we'll need
an implementation of IPrincipalInfo::
- >>> class PrincipalInfo(object):
+ >>> @interface.implementer(interfaces.IPrincipalInfo)
+ ... class PrincipalInfo(object):
...
- ... interface.implements(interfaces.IPrincipalInfo)
- ...
... def __init__(self, id, title, description):
... self.id = id
... self.title = title
@@ -88,10 +86,9 @@
Our authenticator uses this type when it creates a principal info::
- >>> class MyAuthenticatorPlugin(object):
+ >>> @interface.implementer(interfaces.IAuthenticatorPlugin)
+ ... class MyAuthenticatorPlugin(object):
...
- ... interface.implements(interfaces.IAuthenticatorPlugin)
- ...
... def authenticateCredentials(self, credentials):
... if credentials == 'secretcode':
... return PrincipalInfo('bob', 'Bob', '')
@@ -203,10 +200,9 @@
illustrate, we'll create a credentials plugin that extracts credentials from
a request form::
- >>> class FormCredentialsPlugin:
+ >>> @interface.implementer(interfaces.ICredentialsPlugin)
+ ... class FormCredentialsPlugin:
...
- ... interface.implements(interfaces.ICredentialsPlugin)
- ...
... def extractCredentials(self, request):
... return request.form.get('my_credentials')
...
@@ -301,10 +297,9 @@
find a principal. If the first authenticator plugin can't find the requested
principal, the next plugin is used, and so on.
- >>> class AnotherAuthenticatorPlugin:
+ >>> @interface.implementer(interfaces.IAuthenticatorPlugin)
+ ... class AnotherAuthenticatorPlugin:
...
- ... interface.implements(interfaces.IAuthenticatorPlugin)
- ...
... def __init__(self):
... self.infos = {}
... self.ids = {}
Modified: zope.pluggableauth/trunk/src/zope/pluggableauth/authentication.py
===================================================================
--- zope.pluggableauth/trunk/src/zope/pluggableauth/authentication.py 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/src/zope/pluggableauth/authentication.py 2012-05-18 15:20:38 UTC (rev 126130)
@@ -17,18 +17,17 @@
from zope.authentication.interfaces import (
IAuthentication, PrincipalLookupError)
from zope.container.btree import BTreeContainer
-from zope.interface import implements
+from zope.interface import implementer
from zope.pluggableauth import interfaces
from zope.schema.interfaces import ISourceQueriables
from zope.site.next import queryNextUtility
-class PluggableAuthentication(BTreeContainer):
-
- implements(
+ at implementer(
IAuthentication,
interfaces.IPluggableAuthentication,
ISourceQueriables)
+class PluggableAuthentication(BTreeContainer):
authenticatorPlugins = ()
credentialsPlugins = ()
Modified: zope.pluggableauth/trunk/src/zope/pluggableauth/factories.py
===================================================================
--- zope.pluggableauth/trunk/src/zope/pluggableauth/factories.py 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/src/zope/pluggableauth/factories.py 2012-05-18 15:20:38 UTC (rev 126130)
@@ -24,6 +24,7 @@
from zope.publisher.interfaces import IRequest
+ at interface.implementer(interfaces.IPrincipalInfo)
class PrincipalInfo(object):
"""An implementation of IPrincipalInfo used by the principal folder.
@@ -42,7 +43,6 @@
'An over-used term.'
"""
- interface.implements(interfaces.IPrincipalInfo)
def __init__(self, id, login, title, description):
self.id = id
@@ -54,6 +54,7 @@
return 'PrincipalInfo(%r)' % self.id
+ at interface.implementer(IPrincipal)
class Principal(object):
"""A group-aware implementation of zope.security.interfaces.IPrincipal.
@@ -117,8 +118,8 @@
>>> group_data = dict((p.id, p) for p in (
... editor, creator, reviewer, usermanager, contentAdmin,
... zope3Dev, zope3ListAdmin, listAdmin, zpugMember, martians))
- >>> class DemoAuth(object):
- ... interface.implements(IAuthentication)
+ >>> @interface.implementer(IAuthentication)
+ ... class DemoAuth(object):
... def getPrincipal(self, id):
... return group_data[id]
...
@@ -147,7 +148,6 @@
'user_managers', 'zope_3_project', 'list_administrators',
'zope_3_list_admin', 'zpug']
"""
- interface.implements(IPrincipal)
def __init__(self, id, title=u'', description=u''):
self.id = id
@@ -177,6 +177,8 @@
stack.append(iter(group.groups))
+ at component.adapter(interfaces.IPrincipalInfo, IRequest)
+ at interface.implementer(interfaces.IAuthenticatedPrincipalFactory)
class AuthenticatedPrincipalFactory(object):
"""Creates 'authenticated' principals.
@@ -226,10 +228,7 @@
For information on how factories are used in the authentication process,
see README.txt.
"""
- component.adapts(interfaces.IPrincipalInfo, IRequest)
- interface.implements(interfaces.IAuthenticatedPrincipalFactory)
-
def __init__(self, info, request):
self.info = info
self.request = request
@@ -243,6 +242,8 @@
return principal
+ at component.adapter(interfaces.IPrincipalInfo)
+ at interface.implementer(interfaces.IFoundPrincipalFactory)
class FoundPrincipalFactory(object):
"""Creates 'found' principals.
@@ -287,10 +288,7 @@
For information on how factories are used in the authentication process,
see README.txt.
"""
- component.adapts(interfaces.IPrincipalInfo)
- interface.implements(interfaces.IFoundPrincipalFactory)
-
def __init__(self, info):
self.info = info
Modified: zope.pluggableauth/trunk/src/zope/pluggableauth/interfaces.py
===================================================================
--- zope.pluggableauth/trunk/src/zope/pluggableauth/interfaces.py 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/src/zope/pluggableauth/interfaces.py 2012-05-18 15:20:38 UTC (rev 126130)
@@ -206,6 +206,7 @@
"The request the user was authenticated against")
+ at zope.interface.implementer(IAuthenticatedPrincipalCreated)
class AuthenticatedPrincipalCreated:
"""
>>> from zope.interface.verify import verifyObject
@@ -215,8 +216,6 @@
True
"""
- zope.interface.implements(IAuthenticatedPrincipalCreated)
-
def __init__(self, authentication, principal, info, request):
self.authentication = authentication
self.principal = principal
@@ -228,6 +227,7 @@
"""A principal has been created by way of a search operation."""
+ at zope.interface.implementer(IFoundPrincipalCreated)
class FoundPrincipalCreated:
"""
>>> from zope.interface.verify import verifyObject
@@ -237,8 +237,6 @@
True
"""
- zope.interface.implements(IFoundPrincipalCreated)
-
def __init__(self, authentication, principal, info):
self.authentication = authentication
self.principal = principal
Modified: zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/ftpplugins.py
===================================================================
--- zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/ftpplugins.py 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/ftpplugins.py 2012-05-18 15:20:38 UTC (rev 126130)
@@ -15,15 +15,14 @@
"""
__docformat__ = 'restructuredtext'
-from zope.interface import implements
+from zope.interface import implementer
from zope.pluggableauth import interfaces
from zope.publisher.interfaces.ftp import IFTPRequest
+ at implementer(interfaces.ICredentialsPlugin)
class FTPCredentialsPlugin(object):
- implements(interfaces.ICredentialsPlugin)
-
def extractCredentials(self, request):
"""Extracts the FTP credentials from a request.
Modified: zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/generic.py
===================================================================
--- zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/generic.py 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/generic.py 2012-05-18 15:20:38 UTC (rev 126130)
@@ -16,10 +16,11 @@
__docformat__ = "reStructuredText"
from zope.authentication.interfaces import IUnauthenticatedPrincipal
-from zope.interface import implements
+from zope.interface import implementer
from zope.pluggableauth import interfaces
+ at implementer(interfaces.ICredentialsPlugin)
class NoChallengeCredentialsPlugin(object):
"""A plugin that doesn't challenge if the principal is authenticated.
@@ -62,8 +63,9 @@
On the other hand, if the user is unauthenticated:
- >>> class Principal(object):
- ... implements(IUnauthenticatedPrincipal)
+ >>> @implementer(IUnauthenticatedPrincipal)
+ ... class Principal(object):
+ ... pass
>>> request.setPrincipal(Principal())
>>> IUnauthenticatedPrincipal.providedBy(request.principal)
True
@@ -77,7 +79,6 @@
the PAU is configured properly, the user will receive a challenge and be
allowed to provide different credentials.
"""
- implements(interfaces.ICredentialsPlugin)
def extractCredentials(self, request):
return None
Modified: zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/groupfolder.py
===================================================================
--- zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/groupfolder.py 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/groupfolder.py 2012-05-18 15:20:38 UTC (rev 126130)
@@ -20,7 +20,7 @@
import persistent
from zope import interface, event, schema, component
-from zope.interface import alsoProvides, implements
+from zope.interface import alsoProvides, implementer
from zope.security.interfaces import (
IGroup, IGroupAwarePrincipal, IMemberAwareGroup)
@@ -95,13 +95,14 @@
class IGroupPrincipalInfo(IPrincipalInfo):
members = interface.Attribute('an iterable of members of the group')
+ at interface.implementer(IGroupPrincipalInfo)
class GroupInfo(object):
"""An implementation of IPrincipalInfo used by the group folder.
A group info is created with id, title, and description:
- >>> class DemoGroupInformation(object):
- ... interface.implements(IGroupInformation)
+ >>> @interface.implementer(IGroupInformation)
+ ... class DemoGroupInformation(object):
... def __init__(self, title, description, principals):
... self.title = title
... self.description = description
@@ -126,7 +127,6 @@
('joe', 'jane', 'jaime')
"""
- interface.implements(IGroupPrincipalInfo)
def __init__(self, id, information):
self.id = id
@@ -152,11 +152,9 @@
return 'GroupInfo(%r)' % self.id
+ at interface.implementer(IAuthenticatorPlugin, IQuerySchemaSearch, IGroupFolder)
class GroupFolder(BTreeContainer):
- interface.implements(
- IAuthenticatorPlugin, IQuerySchemaSearch, IGroupFolder)
-
schema = IGroupSearchCriteria
def __init__(self, prefix=u''):
@@ -263,10 +261,9 @@
nocycles(principal.groups, seen, getPrincipal)
seen.pop()
+ at interface.implementer(IGroupInformation, IGroupContained)
class GroupInformation(persistent.Persistent):
- interface.implements(IGroupInformation, IGroupContained)
-
__parent__ = __name__ = None
_principals = ()
@@ -369,6 +366,7 @@
alsoProvides(principal, IMemberAwareGroup)
+ at zope.interface.implementer(IGroupAdded)
class GroupAdded:
"""
>>> from zope.interface.verify import verifyObject
@@ -377,8 +375,6 @@
True
"""
- zope.interface.implements(IGroupAdded)
-
def __init__(self, group):
self.group = group
@@ -397,9 +393,11 @@
self.__class__.__name__, sorted(self.principal_ids), self.group_id)
+ at implementer(IPrincipalsAddedToGroup)
class PrincipalsAddedToGroup(AbstractMembersChanged):
- implements(IPrincipalsAddedToGroup)
+ pass
+ at implementer(IPrincipalsRemovedFromGroup)
class PrincipalsRemovedFromGroup(AbstractMembersChanged):
- implements(IPrincipalsRemovedFromGroup)
+ pass
Modified: zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/groupfolder.txt
===================================================================
--- zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/groupfolder.txt 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/groupfolder.txt 2012-05-18 15:20:38 UTC (rev 126130)
@@ -36,8 +36,8 @@
>>> from zope.security.interfaces import IGroupAwarePrincipal
>>> from zope.pluggableauth.plugins.groupfolder import setGroupsForPrincipal
- >>> class Principal:
- ... interface.implements(IGroupAwarePrincipal)
+ >>> @interface.implementer(IGroupAwarePrincipal)
+ ... class Principal:
... def __init__(self, id, title='', description=''):
... self.id, self.title, self.description = id, title, description
... self.groups = []
@@ -49,10 +49,8 @@
>>> from zope.pluggableauth.plugins import principalfolder
- >>> class Principals:
- ...
- ... interface.implements(IAuthentication)
- ...
+ >>> @interface.implementer(IAuthentication)
+ ... class Principals:
... def __init__(self, groups, prefix='auth.'):
... self.prefix = prefix
... self.principals = {
@@ -278,8 +276,8 @@
Lets define a group-aware principal:
>>> import zope.security.interfaces
- >>> class GroupAwarePrincipal(Principal):
- ... interface.implements(zope.security.interfaces.IGroupAwarePrincipal)
+ >>> @interface.implementer(zope.security.interfaces.IGroupAwarePrincipal)
+ ... class GroupAwarePrincipal(Principal):
... def __init__(self, id):
... Principal.__init__(self, id)
... self.groups = []
@@ -296,8 +294,9 @@
Now, if we define the Everybody group:
>>> import zope.authentication.interfaces
- >>> class EverybodyGroup(Principal):
- ... interface.implements(zope.authentication.interfaces.IEveryoneGroup)
+ >>> @interface.implementer(zope.authentication.interfaces.IEveryoneGroup)
+ ... class EverybodyGroup(Principal):
+ ... pass
>>> everybody = EverybodyGroup('all')
>>> provideUtility(everybody, zope.authentication.interfaces.IEveryoneGroup)
@@ -310,9 +309,10 @@
Similarly for the authenticated group:
- >>> class AuthenticatedGroup(Principal):
- ... interface.implements(
+ >>> @interface.implementer(
... zope.authentication.interfaces.IAuthenticatedGroup)
+ ... class AuthenticatedGroup(Principal):
+ ... pass
>>> authenticated = AuthenticatedGroup('auth')
>>> provideUtility(authenticated, zope.authentication.interfaces.IAuthenticatedGroup)
@@ -335,8 +335,8 @@
And they are only added to group aware principals:
- >>> class SolitaryPrincipal:
- ... interface.implements(zope.security.interfaces.IPrincipal)
+ >>> @interface.implementer(zope.security.interfaces.IPrincipal)
+ ... class SolitaryPrincipal:
... id = title = description = ''
>>> event = interfaces.FoundPrincipalCreated(42, SolitaryPrincipal(), {})
@@ -352,9 +352,9 @@
Given an info object and a group...
- >>> class DemoGroupInformation(object):
- ... interface.implements(
+ >>> @interface.implementer(
... zope.pluggableauth.plugins.groupfolder.IGroupInformation)
+ ... class DemoGroupInformation(object):
... def __init__(self, title, description, principals):
... self.title = title
... self.description = description
@@ -365,8 +365,8 @@
...
>>> info = zope.pluggableauth.plugins.groupfolder.GroupInfo(
... 'groups.managers', i)
- >>> class DummyGroup(object):
- ... interface.implements(IGroupAwarePrincipal)
+ >>> @interface.implementer(IGroupAwarePrincipal)
+ ... class DummyGroup(object):
... def __init__(self, id, title=u'', description=u''):
... self.id = id
... self.title = title
Modified: zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/httpplugins.py
===================================================================
--- zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/httpplugins.py 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/httpplugins.py 2012-05-18 15:20:38 UTC (rev 126130)
@@ -16,7 +16,7 @@
__docformat__ = "reStructuredText"
import base64
-from zope.interface import implements, Interface
+from zope.interface import implementer, Interface
from zope.publisher.interfaces.http import IHTTPRequest
from zope.schema import TextLine
from zope.pluggableauth import interfaces
@@ -34,10 +34,9 @@
default=u'Zope')
+ at implementer(interfaces.ICredentialsPlugin, IHTTPBasicAuthRealm)
class HTTPBasicAuthCredentialsPlugin(object):
- implements(interfaces.ICredentialsPlugin, IHTTPBasicAuthRealm)
-
realm = 'Zope'
protocol = 'http auth'
Modified: zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/principalfolder.py
===================================================================
--- zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/principalfolder.py 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/principalfolder.py 2012-05-18 15:20:38 UTC (rev 126130)
@@ -24,7 +24,7 @@
from zope.container.contained import Contained
from zope.container.interfaces import DuplicateIDError
from zope.i18nmessageid import MessageFactory
-from zope.interface import implements, Interface
+from zope.interface import implementer, Interface
from zope.password.interfaces import IPasswordManager
from zope.schema import Text, TextLine, Password, Choice
from zope.pluggableauth.interfaces import (
@@ -113,11 +113,10 @@
missing_value=u'')
+ at implementer(IInternalPrincipal, IInternalPrincipalContained)
class InternalPrincipal(Persistent, Contained):
"""An internal principal for Persistent Principal Folder."""
- implements(IInternalPrincipal, IInternalPrincipalContained)
-
# If you're searching for self._passwordManagerName, or self._password
# probably you just need to evolve the database to new generation
# at /++etc++process/@@generations.html
@@ -172,16 +171,15 @@
login = property(getLogin, setLogin)
+ at implementer(IAuthenticatorPlugin,
+ IQuerySchemaSearch,
+ IInternalPrincipalContainer)
class PrincipalFolder(BTreeContainer):
"""A Persistent Principal Folder and Authentication plugin.
See principalfolder.txt for details.
"""
- implements(IAuthenticatorPlugin,
- IQuerySchemaSearch,
- IInternalPrincipalContainer)
-
schema = ISearchSchema
def __init__(self, prefix=''):
Modified: zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/session.py
===================================================================
--- zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/session.py 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/src/zope/pluggableauth/plugins/session.py 2012-05-18 15:20:38 UTC (rev 126130)
@@ -20,7 +20,7 @@
import zope.container.contained
from urllib import urlencode
-from zope.interface import implements, Interface
+from zope.interface import implementer, Interface
from zope.schema import TextLine
from zope.publisher.interfaces.http import IHTTPRequest
from zope.session.interfaces import ISession
@@ -47,6 +47,7 @@
"""Return password."""
+ at implementer(ISessionCredentials)
class SessionCredentials(object):
"""Credentials class for use with sessions.
@@ -64,7 +65,6 @@
'tiger'
"""
- implements(ISessionCredentials)
def __init__(self, login, password):
self.login = login
@@ -102,6 +102,7 @@
default=u"password")
+ at implementer(ICredentialsPlugin, IBrowserFormChallenger)
class SessionCredentialsPlugin(persistent.Persistent,
zope.container.contained.Contained):
"""A credentials plugin that uses Zope sessions to get/store credentials.
@@ -195,7 +196,6 @@
True
"""
- implements(ICredentialsPlugin, IBrowserFormChallenger)
loginpagename = 'loginForm.html'
loginfield = 'login'
Modified: zope.pluggableauth/trunk/src/zope/pluggableauth/tests.py
===================================================================
--- zope.pluggableauth/trunk/src/zope/pluggableauth/tests.py 2012-05-18 15:17:00 UTC (rev 126129)
+++ zope.pluggableauth/trunk/src/zope/pluggableauth/tests.py 2012-05-18 15:20:38 UTC (rev 126130)
@@ -21,7 +21,7 @@
from zope.component.interfaces import IComponentLookup
from zope.container.interfaces import ISimpleReadContainer
from zope.container.traversal import ContainerTraversable
-from zope.interface import implements
+from zope.interface import implementer
from zope.interface import Interface
from zope.pluggableauth.plugins.session import SessionCredentialsPlugin
from zope.publisher import base
@@ -39,8 +39,8 @@
ClientId, Session, PersistentSessionDataContainer)
+ at implementer(IClientId)
class TestClientId(object):
- implements(IClientId)
def __new__(cls, request):
return 'dummyclientidfortesting'
More information about the checkins
mailing list