[Zope3-checkins] SVN: Zope3/trunk/src/zope/app/ Change
zope.app.preference.preference and
zope.app.container.browser.contents
Jacob Holm
jh at improva.dk
Fri Feb 23 10:05:12 EST 2007
Log message for revision 72783:
Change zope.app.preference.preference and zope.app.container.browser.contents
to adapt to IAnnotations instead of using an IPrincipalAnnotationUtility
directly.
Changed:
U Zope3/trunk/src/zope/app/container/browser/contents.py
U Zope3/trunk/src/zope/app/container/browser/tests/test_contents.py
U Zope3/trunk/src/zope/app/preference/README.txt
U Zope3/trunk/src/zope/app/preference/preference.py
-=-
Modified: Zope3/trunk/src/zope/app/container/browser/contents.py
===================================================================
--- Zope3/trunk/src/zope/app/container/browser/contents.py 2007-02-23 13:10:34 UTC (rev 72782)
+++ Zope3/trunk/src/zope/app/container/browser/contents.py 2007-02-23 15:05:12 UTC (rev 72783)
@@ -30,11 +30,11 @@
from zope.copypastemove.interfaces import IPrincipalClipboard
from zope.copypastemove.interfaces import IObjectCopier, IObjectMover
from zope.copypastemove.interfaces import IContainerItemRenamer
+from zope.annotation.interfaces import IAnnotations
from zope.app import zapi
from zope.app.pagetemplate.viewpagetemplatefile import ViewPageTemplateFile
from zope.app.i18n import ZopeMessageFactory as _
-from zope.app.principalannotation.interfaces import IPrincipalAnnotationUtility
from zope.app.container.browser.adding import Adding
from zope.app.container.interfaces import IContainer, DuplicateIDError
@@ -456,6 +456,5 @@
def getPrincipalClipboard(request):
"""Return the clipboard based on the request."""
user = request.principal
- annotationutil = zapi.getUtility(IPrincipalAnnotationUtility)
- annotations = annotationutil.getAnnotations(user)
+ annotations = IAnnotations(user)
return IPrincipalClipboard(annotations)
Modified: Zope3/trunk/src/zope/app/container/browser/tests/test_contents.py
===================================================================
--- Zope3/trunk/src/zope/app/container/browser/tests/test_contents.py 2007-02-23 13:10:34 UTC (rev 72782)
+++ Zope3/trunk/src/zope/app/container/browser/tests/test_contents.py 2007-02-23 15:05:12 UTC (rev 72783)
@@ -30,8 +30,6 @@
from zope.app.component.testing import PlacefulSetup
from zope.app.container.contained import contained
-from zope.app.principalannotation import PrincipalAnnotationUtility
-from zope.app.principalannotation.interfaces import IPrincipalAnnotationUtility
from zope.app.testing import ztapi
from zope.app.container.interfaces import IContainer, IContained
@@ -57,8 +55,8 @@
ztapi.provideAdapter(IAnnotations, IPrincipalClipboard,
PrincipalClipboard)
- ztapi.provideUtility(IPrincipalAnnotationUtility,
- PrincipalAnnotationUtility())
+ ztapi.provideAdapter(Principal, IAnnotations,
+ PrincipalAnnotations)
def testInfo(self):
# Do we get the correct information back from ContainerContents?
@@ -171,7 +169,22 @@
id = 'bob'
+class PrincipalAnnotations(dict):
+ implements(IAnnotations)
+ data = {}
+ def __new__(class_, context):
+ try:
+ annotations = class_.data[context.id]
+ except KeyError:
+ annotations = dict.__new__(class_)
+ class_.data[context.id] = annotations
+ return annotations
+ def __init__(self, context):
+ pass
+ def __repr__(self):
+ return "<%s.PrincipalAnnotations object>" % __name__
+
class TestCutCopyPaste(PlacefulSetup, TestCase):
def setUp(self):
@@ -184,8 +197,8 @@
ztapi.provideAdapter(IAnnotations, IPrincipalClipboard,
PrincipalClipboard)
- ztapi.provideUtility(IPrincipalAnnotationUtility,
- PrincipalAnnotationUtility())
+ ztapi.provideAdapter(Principal, IAnnotations,
+ PrincipalAnnotations)
def testRename(self):
container = traverse(self.rootFolder, 'folder1')
Modified: Zope3/trunk/src/zope/app/preference/README.txt
===================================================================
--- Zope3/trunk/src/zope/app/preference/README.txt 2007-02-23 13:10:34 UTC (rev 72782)
+++ Zope3/trunk/src/zope/app/preference/README.txt 2007-02-23 15:05:12 UTC (rev 72783)
@@ -77,8 +77,7 @@
>>> settings.skin #doctest:+ELLIPSIS
Traceback (most recent call last):
...
- ComponentLookupError:
- (<InterfaceClass ...interfaces.IPrincipalAnnotationUtility>, '')
+ NoInteraction
So why did the lookup fail? Because we have not specified a principal yet, for
@@ -100,20 +99,25 @@
>>> import zope.security.management
>>> zope.security.management.newInteraction(participation)
-We also need a principal annotations utility, in which we store the settings:
+We also need an IAnnotations adapter for principals, so we can store the
+settings:
- >>> from zope.app.principalannotation.interfaces import \
- ... IPrincipalAnnotationUtility
+ >>> from zope.annotation.interfaces import IAnnotations
>>> class PrincipalAnnotations(dict):
- ... zope.interface.implements(IPrincipalAnnotationUtility)
- ...
- ... def getAnnotations(self, principal):
- ... return self.setdefault(principal, {})
+ ... zope.interface.implements(IAnnotations)
+ ... data = {}
+ ... def __new__(class_, context):
+ ... try:
+ ... annotations = class_.data[context.id]
+ ... except KeyError:
+ ... annotations = dict.__new__(class_)
+ ... class_.data[context.id] = annotations
+ ... return annotations
+ ... def __init__(self, context):
+ ... pass
- >>> annotations = PrincipalAnnotations()
-
>>> from zope.app.testing import ztapi
- >>> ztapi.provideUtility(IPrincipalAnnotationUtility, annotations)
+ >>> ztapi.provideAdapter(Principal, IAnnotations, PrincipalAnnotations)
Let's now try to access the settings again:
Modified: Zope3/trunk/src/zope/app/preference/preference.py
===================================================================
--- Zope3/trunk/src/zope/app/preference/preference.py 2007-02-23 13:10:34 UTC (rev 72782)
+++ Zope3/trunk/src/zope/app/preference/preference.py 2007-02-23 15:05:12 UTC (rev 72783)
@@ -24,12 +24,12 @@
from zope.security.management import getInteraction
from zope.traversing.interfaces import IContainmentRoot
from zope.location import LocationProxy, locate, Location
+from zope.annotation.interfaces import IAnnotations
import zope.app.component.hooks
from zope.app import zapi
from zope.app.container.contained import Contained
from zope.app.container.interfaces import IReadContainer
-from zope.app.principalannotation.interfaces import IPrincipalAnnotationUtility
from zope.app.preference.interfaces import IPreferenceGroup
from zope.app.preference.interfaces import IPreferenceCategory
@@ -174,10 +174,9 @@
del self.__dict__[key]
def data(self):
- utility = zapi.getUtility(IPrincipalAnnotationUtility, context=self)
# TODO: what if we have multiple participations?
principal = getInteraction().participations[0].principal
- ann = utility.getAnnotations(principal)
+ ann = IAnnotations(principal)
# If no preferences exist, create the root preferences object.
if ann.get(pref_key) is None:
More information about the Zope3-Checkins
mailing list