[Checkins] SVN: PluggableAuthService/branches/z3-events/ Rework the events to include the principal object instead of a userid.

Wichert Akkerman wichert at wiggy.net
Sun Jun 10 18:11:44 EDT 2007


Log message for revision 76604:
  Rework the events to include the principal object instead of a userid.

Changed:
  U   PluggableAuthService/branches/z3-events/PluggableAuthService.py
  U   PluggableAuthService/branches/z3-events/events.py
  U   PluggableAuthService/branches/z3-events/events.zcml
  U   PluggableAuthService/branches/z3-events/tests/test_UserFolder.py

-=-
Modified: PluggableAuthService/branches/z3-events/PluggableAuthService.py
===================================================================
--- PluggableAuthService/branches/z3-events/PluggableAuthService.py	2007-06-10 21:56:54 UTC (rev 76603)
+++ PluggableAuthService/branches/z3-events/PluggableAuthService.py	2007-06-10 22:11:43 UTC (rev 76604)
@@ -77,7 +77,7 @@
 from interfaces.plugins import IChallengeProtocolChooser
 from interfaces.plugins import IRequestTypeSniffer
 
-from events import UserCreated
+from events import PrincipalCreated
 
 from permissions import SearchPrincipals
 
@@ -957,7 +957,7 @@
                     pass
 
         if user is not None:
-            event.notify(UserCreated(self, user.getId(), login))
+            event.notify(PrincipalCreated(self, user))
 
 
     security.declarePublic('all_meta_types')

Modified: PluggableAuthService/branches/z3-events/events.py
===================================================================
--- PluggableAuthService/branches/z3-events/events.py	2007-06-10 21:56:54 UTC (rev 76603)
+++ PluggableAuthService/branches/z3-events/events.py	2007-06-10 22:11:43 UTC (rev 76604)
@@ -1,3 +1,5 @@
+from zope.component import adapter
+from zope.component import subscribers
 from zope.interface import implements
 from Products.PluggableAuthService.interfaces.events import *
 
@@ -4,46 +6,49 @@
 class PASEvent(object):
     implements(IPASEvent)
 
-    def __init__(self, acl_users, userid):
+    def __init__(self, acl_users, principal):
         self.acl_users=acl_users
-        self.userid=userid
+        self.principal=principal
+        self.object=principal
 
 
-class UserCreated(PASEvent):
-    implements(IUserCreatedEvent)
+class PrincipalCreated(PASEvent):
+    implements(IPrincipalCreatedEvent)
 
-    def __init__(self, acl_users, userid, login):
-        self.acl_users=acl_users
-        self.userid=userid
-        self.login=login
 
+class PrincipalDeleted(PASEvent):
+    implements(IPrincipalDeletedEvent)
 
-class UserDeleted(PASEvent):
-    implements(IUserDeletedEvent)
 
+class CredentialsUpdated(PASEvent):
+    implements(ICredentialsUpdatedEvent)
 
-class UserCredentialsUpdated(PASEvent):
-    implements(IUserCredentialsUpdatedEvent)
-
-    def __init__(self, acl_users, userid, password):
-        self.acl_users=acl_users
-        self.userid=userid
+    def __init__(self, acl_users, principal, password):
+        super(CredentialsUpdated, self).__init__(acl_users, principal)
         self.password=password
 
 
-class UserPropertiesUpdated(PASEvent):
-    implements(IUserPropertiesUpdatedEvent)
+class PropertiesUpdated(PASEvent):
+    implements(IPropertiesUpdatedEvent)
 
-    def __init__(self, acl_users, userid, properties):
-        self.acl_users=acl_users
-        self.userid=userid
+    def __init__(self, acl_users, principal, properties):
+        super(CredentialsUpdated, self).__init__(acl_users, principal)
         self.properties=properties
 
-def userCredentialsUpdatedHandler(event):
+
+def userCredentialsUpdatedHandler(principal, event):
     event.acl_users.updateCredentials(
             event.acl_users,
             event.acl_users.REQUEST,
             event.acl_users.REQUEST.RESPONSE,
-            event.userid,
+            principal.getId(),
             event.password)
 
+
+ at adapter(IPASEvent)
+def PASEventNotify(event):
+    """Event subscriber to dispatch PASEvent to interested adapters."""
+    adapters = subscribers((event.principal, event), None)
+    for adapter in adapters:
+        pass # getting them does the work
+

Modified: PluggableAuthService/branches/z3-events/events.zcml
===================================================================
--- PluggableAuthService/branches/z3-events/events.zcml	2007-06-10 21:56:54 UTC (rev 76603)
+++ PluggableAuthService/branches/z3-events/events.zcml	2007-06-10 22:11:43 UTC (rev 76604)
@@ -2,8 +2,11 @@
     xmlns="http://namespaces.zope.org/zope"
     >
  
+   <subscriber handler=".events.PASEventNotify" />
+
    <subscriber
-       for=".interfaces.events.IUserCredentialsUpdatedEvent"
+       for=".interfaces.authservice.IBasicUser
+            .interfaces.events.ICredentialsUpdatedEvent"
        handler=".events.userCredentialsUpdatedHandler"
        />
 

Modified: PluggableAuthService/branches/z3-events/tests/test_UserFolder.py
===================================================================
--- PluggableAuthService/branches/z3-events/tests/test_UserFolder.py	2007-06-10 21:56:54 UTC (rev 76603)
+++ PluggableAuthService/branches/z3-events/tests/test_UserFolder.py	2007-06-10 22:11:43 UTC (rev 76604)
@@ -26,10 +26,10 @@
 from zope import event
 from zope.component import adapter
 from zope.component import provideHandler
-from Products.PluggableAuthService.interfaces.events import IUserCreatedEvent
-from Products.PluggableAuthService.events import UserCredentialsUpdated
+from Products.PluggableAuthService.interfaces.events import IPrincipalCreatedEvent
+from Products.PluggableAuthService.events import CredentialsUpdated
 
- at adapter(IUserCreatedEvent)
+ at adapter(IPrincipalCreatedEvent)
 def userCreatedHandler(event):
     if not hasattr(event.acl_users, 'events'):
         event.acl_users.events= []
@@ -307,9 +307,9 @@
 
         self.assertEqual(len(self.uf.events), 1)
         event = self.uf.events[0]
-        self.failUnless(IUserCreatedEvent.providedBy(event))
-        self.assertEqual(event.login, 'event1')
-        self.assertEqual(event.userid, 'event1')
+        self.failUnless(IPrincipalCreatedEvent.providedBy(event))
+        self.assertEqual(event.principal.getUserName(), 'event1')
+        self.assertEqual(event.principal.getId(), 'event1')
 
     def testCredentialsEvent(self):
         def wrap(self, *args):
@@ -318,7 +318,8 @@
         self.uf._data=[]
         self.uf._original=self.uf.updateCredentials
         self.uf.updateCredentials=wrap
-        event.notify(UserCredentialsUpdated(self.uf, "user1", "testpassword"))
+        event.notify(CredentialsUpdated(self.uf,
+                    self.uf.getUserById("user1"), "testpassword"))
         self.assertEqual(len(self.uf._data), 1)
         self.assertEqual(self.uf._data[0][2], "user1")
         self.assertEqual(self.uf._data[0][3], "testpassword")



More information about the Checkins mailing list