[Checkins] SVN: zc.notification/trunk/src/zc/notification/ Adapt to
IAnnotations instead of using the IPrincipalAnnotationUtility
directly.
Jacob Holm
jh at improva.dk
Tue Mar 6 16:07:35 EST 2007
Log message for revision 73022:
Adapt to IAnnotations instead of using the IPrincipalAnnotationUtility directly.
Changed:
U zc.notification/trunk/src/zc/notification/browser/views.py
U zc.notification/trunk/src/zc/notification/email/README.txt
U zc.notification/trunk/src/zc/notification/email/tests.py
U zc.notification/trunk/src/zc/notification/notification.py
U zc.notification/trunk/src/zc/notification/tests.py
-=-
Modified: zc.notification/trunk/src/zc/notification/browser/views.py
===================================================================
--- zc.notification/trunk/src/zc/notification/browser/views.py 2007-03-06 20:46:26 UTC (rev 73021)
+++ zc.notification/trunk/src/zc/notification/browser/views.py 2007-03-06 21:07:34 UTC (rev 73022)
@@ -3,8 +3,6 @@
import zope.schema
import zope.formlib.form
-from zope.app.principalannotation.interfaces import IPrincipalAnnotationUtility
-
import zc.notification.interfaces
from zc.notification.i18n import _
Modified: zc.notification/trunk/src/zc/notification/email/README.txt
===================================================================
--- zc.notification/trunk/src/zc/notification/email/README.txt 2007-03-06 20:46:26 UTC (rev 73021)
+++ zc.notification/trunk/src/zc/notification/email/README.txt 2007-03-06 21:07:34 UTC (rev 73022)
@@ -106,9 +106,11 @@
To use the notifier, we'll need the annotations for the target user::
- >>> annotations = zope.component.getUtility(
- ... zope.app.principalannotation.interfaces.IPrincipalAnnotationUtility)
- >>> user1 = annotations.getAnnotationsById("user1")
+ >>> from zope.annotation.interfaces import IAnnotations
+ >>> auth = zope.component.getUtility(
+ ... zope.app.security.interfaces.IAuthentication)
+ >>> principal = auth.getPrincipal("user1")
+ >>> user1 = IAnnotations(principal)
As with all notifiers, we can just use the `send()` method::
Modified: zc.notification/trunk/src/zc/notification/email/tests.py
===================================================================
--- zc.notification/trunk/src/zc/notification/email/tests.py 2007-03-06 20:46:26 UTC (rev 73021)
+++ zc.notification/trunk/src/zc/notification/email/tests.py 2007-03-06 21:07:34 UTC (rev 73022)
@@ -30,29 +30,18 @@
import zc.notification.tests
-class Authentication(object):
- zope.interface.implements(
- zope.app.security.interfaces.IAuthentication)
-
- def getPrincipal(self, id):
- return Principal(id)
-
-
-class Principal(object):
-
- zope.interface.implements(
- zope.app.security.interfaces.IPrincipal)
-
- def __init__(self, id):
- self.id = id
-
-
def setUp(test):
zope.app.testing.placelesssetup.setUp(test)
- zope.component.provideUtility(Authentication())
- zope.component.provideUtility(
- zc.notification.tests.PrincipalAnnotationUtility())
+ zope.component.provideUtility(zc.notification.tests.Authentication())
+ zope.component.provideAdapter(
+ zc.notification.tests.Annotations,
+ (zope.app.security.interfaces.IPrincipal,),
+ zope.annotation.interfaces.IAnnotations)
+ zope.component.provideAdapter(
+ zc.notification.tests.Annotations,
+ (zope.app.security.interfaces.IPrincipal, None),
+ zope.annotation.interfaces.IAnnotations)
def test_suite():
return unittest.TestSuite((
Modified: zc.notification/trunk/src/zc/notification/notification.py
===================================================================
--- zc.notification/trunk/src/zc/notification/notification.py 2007-03-06 20:46:26 UTC (rev 73021)
+++ zc.notification/trunk/src/zc/notification/notification.py 2007-03-06 21:07:34 UTC (rev 73022)
@@ -30,7 +30,7 @@
import zope.app.container.interfaces
import zope.app.container.contained
-from zope.app.principalannotation.interfaces import IPrincipalAnnotationUtility
+from zope.annotation.interfaces import IAnnotations
import zc.notification.interfaces
@@ -165,9 +165,12 @@
self._registrations = BTrees.OOBTree.OOBTree()
def get_annotations(self, principal_id, context=None):
- utility = zope.component.getUtility(IPrincipalAnnotationUtility,
- context=context)
- return utility.getAnnotationsById(principal_id)
+ principals = zope.component.getUtility(
+ zope.app.security.interfaces.IAuthentication,
+ context=context)
+ principal = principals.getPrincipal(principal_id)
+ return zope.component.getMultiAdapter((principal, context),
+ IAnnotations)
def setNotifierMethod(self, principal_id, method, context=None):
annotations = self.get_annotations(principal_id, context)
Modified: zc.notification/trunk/src/zc/notification/tests.py
===================================================================
--- zc.notification/trunk/src/zc/notification/tests.py 2007-03-06 20:46:26 UTC (rev 73021)
+++ zc.notification/trunk/src/zc/notification/tests.py 2007-03-06 21:07:34 UTC (rev 73022)
@@ -23,23 +23,56 @@
import zope.component
import zope.interface
-import zope.app.principalannotation.interfaces
import zope.app.testing.placelesssetup
+import zope.app.security.interfaces
+import zope.annotation.interfaces
import zc.notification.interfaces
-class PrincipalAnnotationUtility(object):
+class Principal(object):
+
zope.interface.implements(
- zope.app.principalannotation.interfaces.IPrincipalAnnotationUtility)
+ zope.app.security.interfaces.IPrincipal)
+ def __init__(self, id):
+ self.id = id
+
+class Authentication(object):
+
+ zope.interface.implements(
+ zope.app.security.interfaces.IAuthentication)
+
def __init__(self):
self._data = {}
- def getAnnotationsById(self, id):
- return self._data.setdefault(id, {})
+ def getPrincipal(self, principal_id):
+ try:
+ principal = self._data[principal_id]
+ except KeyError:
+ principal = Principal(principal_id)
+ self._data[principal_id] = principal
+ return principal
+class Annotations(dict):
+ zope.interface.implements(
+ zope.annotation.interfaces.IAnnotations)
+
+ def __new__(class_, principal, context=None):
+ try:
+ annotations = principal.annotations
+ except AttributeError:
+ annotations = dict.__new__(class_)
+ principal.annotations = annotations
+ return annotations
+
+ def __init__(self, principal, context=None):
+ pass
+
+
+
+
class PrintNotifier(object):
zope.interface.implements(
@@ -55,8 +88,16 @@
def setUp(test):
zope.app.testing.placelesssetup.setUp(test)
- util = PrincipalAnnotationUtility()
+ util = Authentication()
zope.component.provideUtility(util)
+ zope.component.provideAdapter(
+ Annotations,
+ (zope.app.security.interfaces.IPrincipal,),
+ zope.annotation.interfaces.IAnnotations)
+ zope.component.provideAdapter(
+ Annotations,
+ (zope.app.security.interfaces.IPrincipal, None),
+ zope.annotation.interfaces.IAnnotations)
zope.component.provideUtility(PrintNotifier("email"), name="email")
zope.component.provideUtility(PrintNotifier())
More information about the Checkins
mailing list